当前位置:  开发笔记 > 前端 > 正文

C - 基于用户决策的do/while循环无法正常工作

如何解决《C-基于用户决策的do/while循环无法正常工作》经验,为你挑选了1个好方法。

我有一个问题,经过多次测试,我认为这是由于我不理解输入缓冲区如何工作.

我有一个while循环,它应该继续迭代,直到用户输入"no"来停止迭代.

我有两个问题.

    无论用户输入"否"或任何不等于"是"的内容,while都不会停止迭代

    如您所见,第二个周期的输出存在问题.该程序不会要求用户输入字符串并跳过该步骤,就像用户只输入ENTER一样.

码:

int foo = 0;

do{

  int i, cycles;
  char array[MAX_LENGTH+1];



  for(cycles=0; cycles < MAX_READ_CYCLES; cycles++){

    i=0;

    printf("\n\nEnter a string: ");

    char ch;
    while ((ch = getchar()) != '\n' && ch != EOF) {
      array[i] = ch;
      i++;
    }

    array[i] = '\0'; //string terminator


    printf("String you entered: %s\n", array);

    printf("\nDo you want to continue? 1: yes / 0: no \n");
    scanf("%d", &foo);

  }

} while( foo == 1);

OUTPUT

Enter a string: test
String you entered: test

Do you want to continue? 1: yes / 0: no
0

Enter a string: String you entered: 

Do you want to continue? 1: yes / 0: no
3

Enter a string: String you entered: 

Do you want to continue?

orestisf.. 5

如果用户"yes"因内for循环而进入,则程序不会终止:

#include 
#include 
#define MAX_LENGTH 100
#define MAX_READ_CYCLES 100

int main() {
    int cycles = 0;
    char foo[4];
    do {
        char array[MAX_LENGTH + 1];

        printf("\n\nEnter a string: ");

        char ch;
        int i = 0;
        while ((ch = getchar()) != '\n' && ch != EOF) {
            array[i] = ch;
            i++;
        }

        array[i] = '\0'; //string terminator


        printf("String you entered: %s\n", array);

        printf("\nDo you want to continue?");
        scanf("%s", foo);

        cycles++;

        while ((ch = getchar()) != '\n' && ch != EOF); // force drop stdin

    } while (strcmp(foo, "yes") == 0 && cycles < MAX_READ_CYCLES);
}

另请参阅我无法刷新标准输入和http://c-faq.com/stdio/stdinflush2.html



1> orestisf..:

如果用户"yes"因内for循环而进入,则程序不会终止:

#include 
#include 
#define MAX_LENGTH 100
#define MAX_READ_CYCLES 100

int main() {
    int cycles = 0;
    char foo[4];
    do {
        char array[MAX_LENGTH + 1];

        printf("\n\nEnter a string: ");

        char ch;
        int i = 0;
        while ((ch = getchar()) != '\n' && ch != EOF) {
            array[i] = ch;
            i++;
        }

        array[i] = '\0'; //string terminator


        printf("String you entered: %s\n", array);

        printf("\nDo you want to continue?");
        scanf("%s", foo);

        cycles++;

        while ((ch = getchar()) != '\n' && ch != EOF); // force drop stdin

    } while (strcmp(foo, "yes") == 0 && cycles < MAX_READ_CYCLES);
}

另请参阅我无法刷新标准输入和http://c-faq.com/stdio/stdinflush2.html

推荐阅读
黄晓敏3023
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有