s120lan 发表于 2021-4-13 22:18:07

scanf和getchar的关系是什么???

本帖最后由 s120lan 于 2021-4-13 22:26 编辑

当我写程序时,有scanf和没有scanf时,getchar计算的字符个数为什么不一样呀!!!!!!

s120lan 发表于 2021-4-13 23:08:21

我已经弄懂了,scanf()在读取一串输入的字符串时并不能全部读入,我这个题scanf只读取了i就停止了。这是因为scanf()开始读取输入以后,会在遇到的第一个空白字符空格、制表符(tab)或换行符(\n)出停止读取。然后getchar就是从空格到最后,所以是9个字符。

ba21 发表于 2021-4-13 22:34:07

2个函数没关系。搞懂2个函数的用法就行了。
scanf是从键盘缓冲区(也就是你输入的字符串中)获取需要的内容。
比如:
scanf("%d", &a);
你输入: 123a
那么scanf取的的是123。
后面还有 "a\n" a和你的回车仍然在缓冲区中。

getchar是从键盘缓冲区中获取一个字符。
比如:
你输入: 123a
getchar
那么getchar取的值是1,缓冲区留 下"23a\n"
再getchar取的值是2,,缓冲区留 下"3a\n"
......

s120lan 发表于 2021-4-13 22:39:32

但是我这个程序问题出在哪里呢?

s120lan 发表于 2021-4-13 22:41:12

ba21 发表于 2021-4-13 22:34
2个函数没关系。搞懂2个函数的用法就行了。
scanf是从键盘缓冲区(也就是你输入的字符串中)获取需要的内 ...

我这个程序问题是在哪里呢?

ba21 发表于 2021-4-13 22:43:03

s120lan 发表于 2021-4-13 22:39
但是我这个程序问题出在哪里呢?

%d 取一个整数,%c就是取一个字符, %f 就是取一个浮点数。。。

学会举一反三啊。。。


scanf("%c", &a); // 取一个字符

ba21 发表于 2021-4-13 22:43:59

s120lan 发表于 2021-4-13 22:39
但是我这个程序问题出在哪里呢?

在你第2段代码后,你把ch的值打印出来不就什么都明白了。

ba21 发表于 2021-4-13 22:45:21

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
}

amadboy2009 发表于 2021-7-12 21:51:26

仅供参考
比如你输入了i love you,一共10个字符,键盘缓冲区内一共储存了10个字符,这俩函数应该是scanf取了第一个i,然后进了循环,然后缓冲区还剩下 love you,一共9个字符了,反汇编具体没完,但是猜测,这俩函数应该共用的一个栈。。如果中间键盘缓冲区没发生过变化的话
页: [1]
查看完整版本: scanf和getchar的关系是什么???