使用 getchar() 时出现意外输入,使用 putchar() 时出现意外输出
Unexpected input when using getchar(), and unexpected output using 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
那是因为您将 ASCII 表示打印为您通过 printf("%d",c)
输入的字符的整数。如果您希望您输入的字符仅作为字符打印在控制台上,您应该删除 printf 并使用 putchar。
在您输入一个被该调用读取的字符后
c = getchar();
然后输入缓冲区还存储了由于按回车键而出现的换行符'\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 );
^
注意格式字符串中的空格。在这种情况下,白色 space 字符,例如换行符 '\n'
将被跳过。
当您的程序的输出令人困惑时,将东西塞在一起时,它有助于将事情分解。试试这个程序:
int main() {
for(int x =0; x < 100; x++){
c = getchar();
printf("got character %c = %d\n", c, c);
}
}
我是 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
那是因为您将 ASCII 表示打印为您通过 printf("%d",c)
输入的字符的整数。如果您希望您输入的字符仅作为字符打印在控制台上,您应该删除 printf 并使用 putchar。
在您输入一个被该调用读取的字符后
c = getchar();
然后输入缓冲区还存储了由于按回车键而出现的换行符'\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 );
^
注意格式字符串中的空格。在这种情况下,白色 space 字符,例如换行符 '\n'
将被跳过。
当您的程序的输出令人困惑时,将东西塞在一起时,它有助于将事情分解。试试这个程序:
int main() {
for(int x =0; x < 100; x++){
c = getchar();
printf("got character %c = %d\n", c, c);
}
}