我有一个问题,经过多次测试,我认为这是由于我不理解输入缓冲区如何工作.
我有一个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
如果用户"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