#include<stdio.h>
#include<stdlib.h>
int main()
{
char c='y';
int n=0;
while(c=='y')
{
printf("this is loop number %d\n", n);
n++;
printf("do you wish to continue? (y/n)");
c=getchar();
}
return 0;
}
while循环在初始迭代后退出,而getchar没有将字符输入视为已经过期!这里的实施有什么问题。
答案 0 :(得分:2)
当用户按 Enter 时,会生成两个字符:'y'
或'n'
和换行符'\n'
。第一次调用getchar()
获取该字母,下一次调用获取该换行符。您的代码必须忽略所有换行符。
do { c = getchar(); } while(c == '\n');
答案 1 :(得分:0)
当您在终端上输入“y”时,您输入了两个字符。 'y'
和'\n'
所以getchar()
在第二次通话时返回'\ n'。加getchar()
返回int
而不是char
,但您将其存入char c
。
#include <stdio.h>
#include <stdlib.h>
int main() {
int c = 'y';
int n = 0;
while (c == 'y') {
printf("this is loop number %d\n", n);
n++;
printf("do you wish to continue? (y/n)");
while ((c = getchar()) == '\n' && c != EOF);
}
return 0;
}
您可以使用scanf()
,因为getchar()
非常有限。
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
int main(void) {
int n = 0;
while (true) {
printf("this is loop number %d\n", n++);
printf("do you wish to continue? (y/n)\n");
char c;
if (scanf(" %c", &c) != 1 || c != 'y') {
break;
}
}
}
或者:
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int n = 0;
{
char c;
do {
printf("this is loop number %d\n", n++);
printf("do you wish to continue? (y/n)\n");
} while (scanf(" %c", &c) == 1 && c == 'y');
}
}