我正在尝试编写一个将数据存储在文本文件中的函数,使用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次击键?
你getchar
每次在循环中调用两次.你在字符的末尾按下enter(换行符).然后你在第二个之前碰到计数getchar
.所以计数将被(n + 1) / 2
四舍五入,其中n
是字符数.
另外一个用于换行.除以2,因为每个增量读取两个字符.并且向上舍入,因为增量发生在第二次读取之前.