热门标签 | HotTags
当前位置:  开发笔记 > 开发工具 > 正文

scanf字符输入/输出

如何解决《scanf字符输入/输出》经验,为你挑选了1个好方法。

scanf无法正常使用正常的输入字符

所以我只是尝试使用scanf()和此函数的正常输入/输出。我知道我必须在输入字符和操作数%之前留一个空格,因此我的代码如下。不知何故我不明白为什么我插入的任何输入都保持为0。

 #include

 int main()
 {
  char c ;

  scanf(" %c",&c);
  printf("%c",c);

  return 0;
  }

我期望输出将是我插入的任何字符。例如,通过键盘插入“ A”,输出将恰好是“ A”。


我正在使用vim环境来编辑代码,但是我发现,如果我在代码块上运行此代码,它将可以正常工作。有什么不同?



1> hyde..:

看来您没有从标准输入中提供任何非空白字符(格式字符串中的空白已将其占用掉,包括换行符)字符(或根本没有提供)。如果发生这种情况,scanf将无法解析char并c保留未初始化的状态。

使用未初始化的变量是Undefined Beheavior,因此从理论上讲可能发生任何事情。实际上,从您的描述来看,听起来好像保留的内存c恰好具有字节值0,这是不可打印的字符,因此printf打印其他内容(也许/0,可能什么也没有)。然后环境(vim)可能会向您显示程序退出代码,此处也为0(假定未定义行为不会导致您的程序崩溃)。

要解决此问题,请检查的返回值scanf

 #include

 int 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


推荐阅读
author-avatar
鸳鸯520_205
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有