gpt4 book ai didi

C:scanf 和 getchar 行为的差异

转载 作者:行者123 更新时间:2023-11-30 19:37:22 25 4
gpt4 key购买 nike

我想在 C 中编写一个函数来读取字符,直到遇到换行符。我使用 scanf 和 getchar 编写了以下代码:

使用 scanf 的代码:while(scanf("%c",&x)!=EOF&&x!='\n'){....}

使用 getchar 的代码:while(((x=getchar())!=EOF)&&x!='\n'){....}

int x 是在函数内部声明的局部变量。第二个代码在读取单词(例如:“ADAM\n”)后停止,而 scanf 代码不会中断循环并继续等待。

后来发现scanf之后,x的值为(2^7-1)*(2^8) + 读取字符的ascii值(换行符=32522),而字符常量'\n'为10。所以比较失败了。

我的问题是,为什么 scanf 在读取 '\n' 后为 x 分配一个值 > 32000,而 getchar 分配一个值 10(与字符常量 '\n' 匹配)?

最佳答案

这里的主要区别在于 scanf 行为:

1)一般来说scanf用于读取不同的数据类型(不仅仅是char),例如scanf("%d",&num) 将读取整数并忽略所有“空格”字符(字符为“”(空格)、“\t”(制表符)和“\n”(换行符))。

2) scanf("%c",&x) 以及 scanf("%d",&num) (如果输入了数字)将返回 1 -从 stdin 成功读取数据的数量。注意:如果 stdin 中没有数字,scanf("%d",&num) 将返回 0

关于C:scanf 和 getchar 行为的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39951795/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com