do {
p++;
printf("Enter your name: ");
scanf("%s", &string);
fprintf(fw, "%d\n%s\n",p, string);
printf("Enter your telephone number: ");
scanf("%d",&cislo);
fprintf(fw, "%d\n",cislo);
printf("If u want to add more datas press Y otherwise press N ");
c = getchar();
while (getchar() != '\n')
;
if ( c == 'Y')
k++;
else
printf("You decided not to continue.");
} while (p < k);
你好,代码的结尾似乎不起作用,因为当我输入Y它显示“你决定不继续”这是废话因为它应该将k增加1并再去一次(p nad k在程序的开头,p = 0; k = 1;你能告诉我解决方案吗?
答案 0 :(得分:1)
在读取其他内容之前,您应该清空stdin
缓冲区。
void emptyBuffer() {
char c = 'a';
while (c != '\n' && c != EOF) {
c = getchar();
}
return;
}
此函数清空stdin缓冲区。
printf("Enter your name: ");
scanf("%s", &string);
emptyBuffer();
fprintf(fw, "%d\n%s\n",p, string);
printf("Enter your telephone number: ");
scanf("%d",&cislo);
emptyBuffer();
fprintf(fw, "%d\n",cislo);
printf("If u want to add more datas press Y otherwise press N ");
c = getchar();
因为当您使用getchar()
时,您可能会收到上一个问题(/ answer)的最后一个'\n'
。
和BTW(根据之前的评论) 你应该使用:
if ( c == 'Y' || c == 'y' )
更加用户友好:)
答案 1 :(得分:0)
使用c = getchar();
,您正在阅读电话号码输入的'\n'
(返回)。
为了避免这种情况,您必须刷新stdin
,或者在这种情况下,请拨打getchar()
两次。
另一种简单的方法是使用scanf来完成工作:
scanf("%s", c);
if (( c[0] == 'y') || ( c[0] == 'Y'))
k++;
修改强>
根据OP的要求,完整的解决方案可能是:
do
{
printf("Enter your name: ");
scanf("%s", &string);
fprintf(fw, "%d\n%s\n",p, string);
printf("Enter your telephone number: ");
scanf("%d",&cislo);
fprintf(fw, "%d\n",cislo);
printf("If u want to add more datas press Y otherwise press N: ");
scanf("%s", c);
} while (( c[0] == 'y') || ( c[0] == 'Y'));
printf("You decided not to continue.\n");