我有一个问题,经过多次测试,我认为这是由于我不理解输入缓冲区如何工作.
我有一个while循环,它应该继续迭代,直到用户输入"no"来停止迭代.
我有两个问题.
码:
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);
Run Code Online (Sandbox Code Playgroud)
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?
Run Code Online (Sandbox Code Playgroud)
如果用户"yes"因内for循环而进入,则程序不会终止:
#include <stdio.h>
#include <string.h>
#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);
}
Run Code Online (Sandbox Code Playgroud)
另请参阅我无法刷新标准输入和http://c-faq.com/stdio/stdinflush2.html