c - 使用 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();
'\n'
然后输入缓冲区还存储了由于按下 Enter 键而出现的换行符。
因此在这个循环中
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'
在这种情况下,将跳过空格字符,例如换行符。
推荐阅读
- sql - CASE 中的 PARTITION BY 不适用于多个 AND 语句
- r - 从多个矩阵中高效操作和提取数据 - 均值和日期
- python - 在密集的 Keras 层中绑定自动编码器权重
- android - 通过 Wireshark 实时捕获 Android 蓝牙流量
- bash - 从 awk 输出,如何剪切或修剪列中的字符
- python - python自定义函数中使用GEKKO变量的问题
- loops - 比较列表中的所有元素并获取匹配对的可变引用
- android - 更新后 ThemeOverlay 未在 Android Studio 的预览/设计视图中显示更改
- node.js - 将大文件上传到 S3 存储桶时出现 NetworkingError (EPIPE)
- asp.net-mvc - 无法通过 Web 部署将 asp.net 发布到 IIS