scanf和getchar的关系是什么???
本帖最后由 s120lan 于 2021-4-13 22:26 编辑当我写程序时,有scanf和没有scanf时,getchar计算的字符个数为什么不一样呀!!!!!! 我已经弄懂了,scanf()在读取一串输入的字符串时并不能全部读入,我这个题scanf只读取了i就停止了。这是因为scanf()开始读取输入以后,会在遇到的第一个空白字符空格、制表符(tab)或换行符(\n)出停止读取。然后getchar就是从空格到最后,所以是9个字符。 2个函数没关系。搞懂2个函数的用法就行了。
scanf是从键盘缓冲区(也就是你输入的字符串中)获取需要的内容。
比如:
scanf("%d", &a);
你输入: 123a
那么scanf取的的是123。
后面还有 "a\n" a和你的回车仍然在缓冲区中。
getchar是从键盘缓冲区中获取一个字符。
比如:
你输入: 123a
getchar
那么getchar取的值是1,缓冲区留 下"23a\n"
再getchar取的值是2,,缓冲区留 下"3a\n"
......
但是我这个程序问题出在哪里呢? ba21 发表于 2021-4-13 22:34
2个函数没关系。搞懂2个函数的用法就行了。
scanf是从键盘缓冲区(也就是你输入的字符串中)获取需要的内 ...
我这个程序问题是在哪里呢? s120lan 发表于 2021-4-13 22:39
但是我这个程序问题出在哪里呢?
%d 取一个整数,%c就是取一个字符, %f 就是取一个浮点数。。。
学会举一反三啊。。。
scanf("%c", &a); // 取一个字符 s120lan 发表于 2021-4-13 22:39
但是我这个程序问题出在哪里呢?
在你第2段代码后,你把ch的值打印出来不就什么都明白了。 s120lan 发表于 2021-4-13 22:41
我这个程序问题是在哪里呢?
#include<stdio.h>
int main(){
int a;
scanf("%d",&a); // 输入 123a
printf("%d\n", a); // 123
printf("%a\n", getchar()); // a
printf("%d\n", getchar()); // 输出 10, \n 的ascii码值为10
} 仅供参考
比如你输入了i love you,一共10个字符,键盘缓冲区内一共储存了10个字符,这俩函数应该是scanf取了第一个i,然后进了循环,然后缓冲区还剩下 love you,一共9个字符了,反汇编具体没完,但是猜测,这俩函数应该共用的一个栈。。如果中间键盘缓冲区没发生过变化的话
页:
[1]