Def*_*ult 1 c input scanf getchar
我刚学用C编程和感到有点困惑的东西去与scanf和getchar.我知道使用类似的东西scanf("%d", &i)会读取整数输入,但在输入缓冲区中保留以下换行符(这就是为什么必须getchar() == '\n'通过getchar在scanf调用之后使用之前查找来清除输入缓冲区的原因.
这是我的简单(不正确)程序,它读取整数,然后是字符输入,并将它们打印回给用户:
int main(void)
{
int i;
printf("Enter an integer: ");
scanf("%d\n", &i);
printf("Enter a char: ");
char ch = getchar();
printf("You entered integer: %d\nYou entered character: %c\n", i, ch);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如果我将换行符留在我的scanf格式字符串中(所以只有"%d"),有意义的是,只要用户输入一个整数并点击输入,该整数将被读取并存储i,程序将继续执行( "输入一个字符:"立即打印,并ch存储换行符.
但是,使用格式String "%d\n"我会遇到意外行为.当用户输入一个整数并按Enter键时,我希望打印"输入字符:".相反,你可以继续按Enter键,直到你决定输入一个不同的角色时才会发生任何事情.所以你可以输入"10",输入6次,然后键入"d"并getchar()读取"正确".整个程序输出看起来像这样
Enter an integer: 10
d
Enter a char: You entered integer: 10
You entered character: d
Run Code Online (Sandbox Code Playgroud)
为什么我的程序在输入字符之前会停止?似乎奇怪的是,我的第二个printf函数似乎是在调用之后调用的getchar(因为在"输入字符:"之前输入了字符读取).
任何帮助将不胜感激.我只是想在C中进一步理解这种细微差别.
| 归档时间: |
|
| 查看次数: |
247 次 |
| 最近记录: |