scanf无法正常使用正常的输入字符
所以我只是尝试使用scanf()和此函数的正常输入/输出。我知道我必须在输入字符和操作数%之前留一个空格,因此我的代码如下。不知何故我不明白为什么我插入的任何输入都保持为0。
#includeint main() { char c ; scanf(" %c",&c); printf("%c",c); return 0; }
我期望输出将是我插入的任何字符。例如,通过键盘插入“ A”,输出将恰好是“ A”。
我正在使用vim环境来编辑代码,但是我发现,如果我在代码块上运行此代码,它将可以正常工作。有什么不同?
看来您没有从标准输入中提供任何非空白字符(格式字符串中的空白已将其占用掉,包括换行符)字符(或根本没有提供)。如果发生这种情况,scanf
将无法解析char并c
保留未初始化的状态。
使用未初始化的变量是Undefined Beheavior,因此从理论上讲可能发生任何事情。实际上,从您的描述来看,听起来好像保留的内存c
恰好具有字节值0,这是不可打印的字符,因此printf
打印其他内容(也许/0
,可能什么也没有)。然后环境(vim)可能会向您显示程序退出代码,此处也为0(假定未定义行为不会导致您的程序崩溃)。
要解决此问题,请检查的返回值scanf
:
#includeint main() { char c ; int r = scanf(" %c",&c); if (r==1) { // Always print something and add newline // to be sure we see some output always. printf("c='%c'\n",c); } else { printf("scanf error: %d\n", r); // If r==-1, errno variable tells what error was } return 0; }
实用提示:要在没有终端的情况下提供标准输入(因此您无法键入输入),可以通过管道输入以下内容:
echo A | ./thisprogram