- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我对 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/
我很抱歉我英语不好。 让我们看看下面的代码。 main = getChar 首先,main会被求值,它的值是“getChar”,但是编译器不知道“getChar”的值,所以编译器会求值“getChar
我正在尝试比较用户插入的两个(或更多)输入。我正在为它使用 getchar() 函数,但它似乎不起作用......我需要先检查它的字母(英文),以及是否连续没有 2 个(或更多)大写或小写字母。这是我
当我想弄清楚 getchar() 到底做了什么时,这一小段 loop 确实让我感到困惑。 int i; int c; for (i = 0; i 验证您的输入。 因此,您应该在完成 getchar 后
#include int main(){ char ch; while((ch=getchar())!=EOF){ putchar(ch); } cha
我在关注《C Primer Plus》这本书,遇到这样一段代码: // echo_eof.c -- repeats input to end of file. #include int main(v
我只是编程的初学者。我正在学习 K&R 的书《C 编程语言》。我一边看一边对这个问题越来越好奇——当有一个循环从输入中一个一个地获取字符时,我在循环中放置了一个输出函数,我认为其结果就像在输入每个字符
人们通常会提到 while( getchar() != '\n' ) 当谈到清除输入缓冲区或溢出时。 fgetc 或 getc 也可以。例如: while( fgetc(stdin) != '\n'
一旦遇到'~',之后的任何内容都不会被打印出来,控制就出来了while循环 while((c = getchar()) != '~') { putchar(c); printf(" "
我有一个执行大量处理的小程序。您可以通过按回车键打印进度。 我实现它的方法是在主线程中完成处理,同时我有一个 pthread 不断循环 getchar() 以等待输入键。 问题是当我完成处理时。发生这
我试图解决 K&R 中的问题 1.6。问题是—— 验证表达式getchar() != EOF 为 0 或 1。 我找到了一个可行的解决方案: #include int main(){ int
我正在尝试开发一个(简单的)个人项目,它使用经典的“MOD 10”规则充当信用卡验证器。 我在项目的第一部分遇到了一些困难。 目标是这样的: 从用户那里获取 16 个字符,一次一个。 每输入一个字符,
对于我的一个练习,我们需要逐行阅读并仅使用 getchar 和 printf 输出。我正在关注 K&R,其中一个示例显示了使用 getchar 和 putchar。根据我的阅读,getchar() 一
我只是想知道如何 getchar() 实现了吗?是不是像下面这样?以这种方式读取单字节效率非常低。它是否使用一些缓冲? 伪代码: int getchar() { char buf[1];
在 K&R 书中的以下代码示例中,如果我将 putchar(c) 替换为 printf("%c", c),代码的工作方式相同。但是,如果我用 printf("%d", c) 替换它,它会给出乱码输出。
我想选择性地中止 getChar行动。我需要以下功能: getChar' :: (Char -> IO ()) -> IO (IO ()) 如果是abort IO ()) -> IO (IO ())
所以我知道 getchar() 在输入结束或发生错误时返回 EOF。我也知道我可以通过 ferror(stdin) 和 feof(stdin) 来检查哪些情况发生了。我想知道特别是在什么情况下会发生错
我无法忽略空格/制表符。当用户从命令提示符输入字符时,它应该只接受除空格或制表符空格之外的任何字符。 例如: $ ./a.out Character: = 那么,就是= 如果 $ ./a.out Ch
我正在使用 chrome devtools network API和下面的代码,但总是在我打开 devtool 窗口 (F12) 时启动警报窗口。有什么方法可以在不打开该窗口的情况下启动警报,例如,当
所以我知道 getchar() 在输入结束或发生错误时返回 EOF。我也知道我可以通过 ferror(stdin) 和 feof(stdin) 来检查哪些情况发生了。我想知道特别是在什么情况下会发生错
所以我一直在自学 C,并且遇到了来自“stdio.h”的“getchar()”和“putchar()”方法。据我了解,“getchar()”从文本流中获取最新的字符并将其存储到一个变量中,而“putc
我是一名优秀的程序员,十分优秀!