提问人:ILoveYouAll 提问时间:9/17/2023 最后编辑:wohlstadILoveYouAll 更新时间:9/17/2023 访问量:62
为什么我的“do while”循环在执行 printf 之前首先要求 getchar?
Why does my 'do while' loop first asks for getchar before executing printf?
问:
我是编程新手,并试图自学 C。但是,我遇到了一个我不知道如何解决的问题。这是我的简单程序。对不起,语法错误,英语是我的第二语言。
int main(){
int x, confirmation;
do{
printf("\nTest Data: ");
scanf("\n%d ", &x);
printf("Do you want to stop? Y/N");
confirmation = getchar();
} while(confirmation != 'Y');
return 0;
}
顺便说一句,这是在 Codeblocks 中。
当执行程序“测试数据:”时,很好,但首先它会要求,然后再执行第二个。除此之外,当我输入“Y”时,程序运行良好,但不能在执行第二个之前输入。scanf
getchar
printf
printf
喜欢这个:
在使用之前,我使用过,但问题是一样的。我也试过循环。getchar
scanf("%c",...)
while
答:
1赞
Ted Lyngmo
9/17/2023
#1
是因为它卡在了后面的空格中。删除该空格,然后阅读直到到达换行符。它可能看起来像这样:scanf
%d
#include <ctype.h>
#include <stdio.h>
int main(void) {
int x, confirmation;
int ch;
do {
printf("\nTest Data: ");
if (scanf("%d", &x) != 1) break; // no \n or space
printf("Do you want to stop? Y/N");
// read until the newline:
while((ch = getchar()) != EOF && ch != '\n') {}
if (ch == EOF) break;
confirmation = getchar();
} while(toupper((unsigned char)confirmation) != 'Y');
}
评论
\n
fflush(stdout)
scanf("\n%d ", &x);
这里面不需要换行符。而且绝对不是尾随空间!尾随空格将等待更多非空格输入,然后返回并被执行。scanf
printf