如何解决使用 getchar() 时出现意外输入,使用 putchar() 时出现意外输出
我是 c 的新手,对它的了解很少,但是据我所知,这段代码应该打印我输入的字符(它应该打印两次),或者打印我的字符的位数表示我的角色(在再次要求输入 100 次循环之前)但似乎两者都不做。
相反,它打印一些随机数(我假设表示为数字),然后是字母,然后是 10。
我正在使用 gcc 在 wsl 上运行的 ubuntu 18.04 上编译它,如果这有什么不同的话。我又一次是个新手,所以我不知道这是否是一个可能的错误点。
这是我的代码:
#include <stdio.h>
int c;
int main() {
for(int x =0; x < 100; x++){
c = getchar();
printf("%d",c);
putchar( c );
}
}
示例:
输入:f
输出:102f10
或
输入:r
输出:114r10
解决方法
在你输入一个被这个调用读取的字符之后
c = getchar();
然后输入缓冲区还存储了由于按 Enter 键而出现的换行符 '\n'
。
因此在这个循环中
for(int x =0; x < 100; x++){
c = getchar();
printf("%d",c);
putchar( c );
}
如果您输入例如字符 'f'
则此调用
printf("%d",c);
输出其内部代码
102
之后的下一个调用
putchar( c );
输出字符本身。
f
现在输入缓冲区包含换行符'\n'
。并且在循环的下一次迭代中它的内部表示
10
由调用输出
printf("%d",c);
代替电话
c = getchar();
使用
scanf( " %c",&c );
^
注意格式字符串中的空格。在这种情况下,将跳过空白字符,例如换行符 '\n'
。
那是因为您通过执行 printf("%d",c)
将 ASCII 表示打印为您输入的字符的整数。如果您希望将您输入的字符打印在控制台上仅作为字符,您应该删除 printf 并使用 putchar。
当您的程序的输出令人困惑,并且东西塞在一起时,最好将其分解。试试这个程序:
int main() {
for(int x =0; x < 100; x++){
c = getchar();
printf("got character %c = %d\n",c,c);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。