gpt4 book ai didi

对 getchar 和 scanf 感到困惑

转载 作者:太空宇宙 更新时间:2023-11-04 00:18:28 25 4
gpt4 key购买 nike

我对 getchar()scanf() 的用法感到很困惑。这两者有什么区别?

我知道 scanf() [and family] 从用户 [或文件] 中逐个字符地获取一个字符并将其保存到一个变量中,但它是立即执行此操作还是在按下某些操作后执行此操作 ( 输入)?

而且我不太理解这段代码,我看到很多使用 getchar() 的代码,它们都让你在屏幕上输入任何你想输入的内容,但没有任何反应,但是当你按 enter 退出。

int j, ch;

printf("please enter a number : \n");

while (scanf("%i", &j) != 1) {
while((ch = getchar()) != '\n') ;
printf("enter an integer: ");
}

在这段代码中,我不能使用 scanf() 逐个字符地获取一个字符并对其进行测试吗?另外,这行是什么意思?

scanf("%i", &j) != 1

因为当我按下 1 时,当我按下 2 时没有区别?这件作品有什么作用?

这条线什么时候会出现?

printf("enter an integer: ");

因为它永远不会发生。

最佳答案

好吧,scanf 是一个多功能的实用函数,它可以根据格式字符串读取多种类型的数据,而 getchar() 只能读取一个字符。

基本上,

char someCharacter = getchar();

相当于

char someCharacter;
scanf("%c", &someCharacter);

我不是 100% 确定,但如果您只需要读取一个字符,getchar() 可能比 scanf() 更“便宜”,因为开销处理格式字符串的过程不存在(如果您读取许多 字符,这可能算作某种东西,例如在一个巨大的 for 循环中)。

对于第二个问题。

这段代码:

scanf("%i", &j) != 1

表示您希望 scanf 读取变量“j”中的一个整数。如果读取成功,即流中的下一个输入实际上是一个整数,scanf 将返回 1,因为它正确读取并分配了 1 个整数。

查看对 this SO question 的最早回答 有关 scanf 返回值的更多详细信息。

关于对 getchar 和 scanf 感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20970622/

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