【发布时间】:2021-05-25 09:52:11
【问题描述】:
我对在代码中同时使用puts()、gets()、putchar() 和getchar() 感到困惑。
当我运行以下代码时,它正在执行所有步骤: 获取输入,打印输出,再次获取输入,打印输出。
#include <stdio.h>
int main() {
char ch[34];
gets(ch);
puts(ch);
char g;
g = getchar();
putchar(g);
}
输出:
Priyanka
Priyanka
J
J
但是,当我使用此代码时: 它只做两个步骤: 接受输入,打印输入,然后是一行空间。我不明白为什么它会这样。
代码:
#include <stdio.h>
int main() {
char g;
g = getchar();
putchar(g);
char ch[34];
gets(ch);
puts(ch);
getch();
}
输出:
P
P
【问题讨论】:
-
gets()在 C 和 C++ 标准中均已弃用。用起来也很危险。 -
请参阅 Why
gets()is too dangerous to be used,详细讨论为什么永远不应该使用gets()以及其他替代方案。 -
请注意,上一个示例中使用的
getch()不是标准C 函数。 -
第二个例子的操作顺序是:你输入“P”然后回车(终端驱动显示的字母和换行符);
getchar()返回字母“P”;putchar()输出“P”,但尚未出现;gets()读取换行符并返回一个空字符串;puts()输出空字符串和换行符,也强制显示“P”。如果您输入“Priyanka”而不是“P”,您会得到类似的结果,“Priyanka”出现两次。如果您在putchar(g);之后使用putchar('X')并输入“Priyanka”,您会看到“PXriyanka”。 -
请注意,生产代码需要检查输入操作是否成功,您还需要使用
int g而不是char g,因为getchar()返回一个int,而不是一个char(在某些情况下差异确实很重要)。
标签: c getchar gets puts putchar