|
发表于 2023-3-7 23:09:01
|
显示全部楼层
scanf()和getchar()都是从标准输入(stdin)读取数据的函数,但是它们的工作方式有些不同。
scanf()是一个格式化的输入函数,它会根据指定的格式符读取相应类型的数据,直到遇到空格、换行或文件结束符(EOF)。
getchar()是一个非格式化的输入函数,它只会读取一个字符,包括空格和换行。
在你的程序中,你先用scanf()读取了两个整数和两个浮点数,然后用getchar()读取了两个字符。
当你输入3 4 8.5 71.82A a并按下回车时,你的输入缓冲区(stdin)中的内容是:3 4 8.5 71.82A a\n
其中\n表示换行符。scanf()会按照你给定的格式符,依次读取3、4、8.5和71.82,并把它们存储在相应的变量中。
然后,scanf()会停止读取,因为它遇到了一个非数字的字符A。此时,输入缓冲区中剩下的内容是:
A a\n
接下来,你调用了两次getchar(),每次都会读取一个字符。第一次getchar()会读取A,并把它存储在c1中。
第二次getchar()会读取空格,并把它存储在c2中。注意,这里的空格是你输入的第一个空格,而不是换行符。
此时,输入缓冲区中剩下的内容是:a\n
最后,你用printf()和putchar()输出了你的变量的值。
printf()会按照你给定的格式符,依次输出3、4、8.5和71.82,并在每行的末尾加上一个换行符。
putchar()会输出c1和c2的值,即A和空格,并在最后加上一个换行符。因此,你的程序的输出是:
a=3, b=4 x=8.500000, y=7.182000e+01 A
如果你想让你的程序按你的预期输出就用一个 getchar() 把空格给读取之后再用 getchar 来读取 'a':
- #include<stdio.h>
- int main(){
- int a, b;
- float x, y;
- char c1, c2;
- scanf("%d %d", &a, &b);
- scanf("%f %e", &x, &y);
- c1 = getchar();
- getchar(); // 注意这里
- c2 = getchar();
- printf("a=%d, b=%d\n", a, b);
- printf("x=%f, y=%e\n", x, y);
- putchar(c1);
- putchar(c2);
- putchar('\n');
- return 0;
- }
复制代码
|
|