我正在写一个基本的程序来学习如何在C中使用基本的输入/输出,它工作得很好。唯一的问题是当它打印时,在终端上的字符串末尾有一个“%”。下面是我的代码:
#include <stdio.h>
int main(int argc, char **argv) {
char name[32];
printf("Enter your name: ");
scanf("%s", name);
printf("Hello, %s", name);
return 0;
}
字符串
当我运行程序时,输出为Hello, Andrew%
有什么需要帮忙的吗?
5条答案
按热度按时间t40tm48m1#
在你的代码中没有任何东西可以解释这种行为,但是,如果你是从shell运行它的话,这很可能是你的shell提示符。
在输出中添加新行:
字符串
这应该会导致提示符打印在下一行,正如您所期望的那样。
ki0zmccv2#
stdout
流是行缓冲的。这意味着输出不会出现在控制台上,直到输出一个新行或缓冲区已满。这可能是为什么你在屏幕上看到%
的原因。'\n'
导致printf
立即在屏幕上打印输出。注意,如果输入字符串大于
31
字符,那么scanf
将溢出缓冲区name
调用未定义的行为。这可能会导致程序因segfault而崩溃。您应该通过提供最大字段宽度来保护它,该宽度应小于数组长度1,以容纳scanf
添加的终止空字节。字符串
qcbq4gxm3#
由于您没有输出一个新行-这是您的shell提示符显示在指定的输出之后。尝试
printf("Hello, %s\n", name);
velaa5lx4#
在你的zsh shell中运行这个命令行
PROMPT_EOL_MARK=''
,这应该足以修复它。xqk2d5yq5#
PROMPT_EOL_MARK=''
将这一行添加到.zshrc文件中。