我似乎无法弄清楚我在以下简单代码中做错了什么。如果输入y
,它应打印出0..9,否则退出。
void userInput(char *in);
int main()
{
int i;
char c;
setbuf(stdout, 0);
userInput(&c);
while(c == 'y'){
for (i = 0; i < 9; i++) {
printf("\n%c", i);
}
userInput(&c);
}
printf("\nGoodbye!");
return 0;
}
void userInput(char *in)
{
printf("\nPrint numbers 0 to 9? (y/n) ");
scanf("%c",in);
fflush(stdin);
while ( (*in !='y') || (*in != 'n') ){
printf("\nUnknown command. Press (y/n)");
scanf("%c",in);
fflush(stdin);
}
}
答案 0 :(得分:1)
您正在使用format specifier %c
,它会打印出具有给定值的ASCII字符。 ASCII characters 0到9都是不可打印的控制字符或各种形式的空格。
您希望使用%d
来打印出十进制整数。
printf("\n%d", i);
顺便说一句,您还应该将换行符(\n
)放在字符串的末尾,而不是开头。用户输入y
后输入键已经前进了行,默认情况下stdio是行缓冲,这意味着在到达换行符之前它可能不会打印任何内容。这意味着您可能看不到提示(因为没有尾随换行符),也没有看到&#34; Goodbye!&#34;信息。如果您不希望在提示后有换行符,而不是在末尾添加换行符,则可以调用fflush(stdout)
以确保刷新缓冲区,将其打印到终端。
编辑:啊,我注意到你在上面禁用了stdout的缓冲。这也有效,但通常最好保留默认缓冲并在需要时明确刷新。