#include <stdio.h>
int main()
{
int x,y;
char z;
scanf( "%d", &x );
scanf( "%d", &y );
scanf( "%c", &z );
printf( "%d %d %d", x, y, z );
}
输入:
1
2
3
输出:
1 2 10
为什么
scanf
读的是\n
,而不是\r
?按“回车”键时,输入是\r
和\n
?\r
-->(ASCII 13)和\n
-->(ASCII 10) 最佳答案
stdin
被定义为文本流(C997.19.3.7),根据定义,该文本流仅由换行符(C99 7.19.2.2)终止。这是对stdout的补充,printf只使用'\n'(而不是'\r')作为换行符。
由于某种原因,假设您的标准输入是非标准的,大多数平台在默认情况下只会将换行符(按enter)解释为'\n'字符。这通常由内核处理,如果您真的需要,您必须告诉它给您回车。
此外,即使您的平台确实提供了'\r'字符,也有可能在'\r'之前将'\n'呈现给stdin。尝试:
int x,y;
char z1, z2;
scanf("%d", &x);
scanf("%d", &y);
scanf("%c", &z1);
scanf("%c", &z2);
printf("%d %d %d %d\n", x, y, z1, z2);