当前位置:  开发笔记 > 编程语言 > 正文

getchar()函数的奇怪行为

如何解决《getchar()函数的奇怪行为》经验,为你挑选了1个好方法。

我正在尝试编写一个将数据存储在文本文件中的函数,使用fopen("filename","w")where"filename"是用户输入的字符串.我已选择通过该getchar()功能这样做,我需要一个计数器变量,每次击键都会增加.这是令人费解和困惑的地方.

   char *p;
   int count = 0; 
   p = (char*)malloc(32*sizeof(char));
   do 
   {
       *p = getchar();
       count++;
   }
   while(getchar() != '\n');

直到输入3个字符,它只需按1次Enter键,计数器就准确到2个字符后,它跟随一个奇怪的模式.

--------------------Input------------------------Count--------------------
-------------------- t --------------------------  1  --------------------
-------------------- te -------------------------  2  --------------------
-------------------- tes  -----------------------  2  --------------------
-------------------- test ------------------------ 3 ---------------------
-------------------- test1 ----------------------- 3 ---------------------
-------------------- test12 ---------------------- 4 ---------------------
-------------------- test123 --------------------- 4 ---------------------
-------------------- test1234 -------------------- 5 ---------------------

基本上,对于每2个额外的字符,计数增加1.

该功能如何在此上下文中工作,为什么需要2次击键?



1> David Schwar..:

getchar每次在循环中调用两次.你在字符的末尾按下enter(换行符).然后你在第二个之前碰到计数getchar.所以计数将被(n + 1) / 2四舍五入,其中n是字符数.

另外一个用于换行.除以2,因为每个增量读取两个字符.并且向上舍入,因为增量发生在第二次读取之前.

推荐阅读
落单鸟人
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有