C Printf在行尾插入%

C Printf在行尾插入%,c,printf,C,Printf,我正在写一个basic程序来学习如何在C语言中使用基本的输入/输出,它工作得很好。我唯一的问题是当它打印时,终端上字符串的末尾有一个“%”。这是我的密码: #include <stdio.h> int main(int argc, char **argv) { char name[32]; printf("Enter your name: "); scanf("%s", name); printf("Hello, %s", name);

我正在写一个basic程序来学习如何在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;

}
#包括
int main(int argc,字符**argv){
字符名[32];
printf(“输入您的姓名:”);
scanf(“%s”,名称);
printf(“你好,%s”,姓名);
返回0;
}
当我运行程序时,输出是
Hello,Andrew%


有什么帮助吗?

代码中没有任何东西可以解释这种行为。但是,如果您是从shell运行此命令,则可能是shell提示符

在输出中添加换行符:

printf("Hello, %s\n", name);

这将导致提示符按您的预期打印到下一行。

因为您尚未输出新行-即在指定输出后显示的shell提示符字符。试试printf(“Hello,%s\n”,name)

标准输出流是行缓冲的。这意味着在输出换行符或缓冲区已满之前,输出不会显示在控制台上。这可能是您在屏幕上看到
%
的原因<代码>'\n'使
printf
立即在屏幕上打印输出

请注意,如果输入字符串大于
31
个字符,则
scanf
将溢出缓冲区
name
调用未定义的行为。这可能会由于segfault导致程序崩溃。您应该提供最大字段宽度,该宽度应小于数组长度1,以适应由
scanf
添加的终止空字节,从而防止出现这种情况

#include <stdio.h>

// if your not using command line argument, use the below
// signature of main
int main(void) {
    char name[32];

    printf("Enter your name: \n");  // add a newline to output
    scanf("%31s", name);  // -1 for the terminating null byte
    printf("Hello, %s\n", name);  // add a newline to output

    return 0;
}
#包括
//如果不使用命令行参数,请使用下面的
//主签名
内部主(空){
字符名[32];
printf(“输入您的姓名:\n”);//在输出中添加换行符
scanf(“%31s”,name);/-1表示终止的空字节
printf(“Hello,%s\n”,name);//在输出中添加换行符
返回0;
}

在Visual Studio中工作正常。您正在使用哪个编译器?您没有在输出的末尾添加换行符;出于好奇,
%
是您系统上的提示字符吗?@pranitkothari:Emacs和GCC@JohnBode:否,我使用带有“>”字符的zsh如果使用
printf(“(Hello,%s)”,name),输出是什么,只是好奇而已。不是我的shell提示符,而是新行出于某种原因做的,谢谢@ahalverson:我不是zsh用户,但它看起来像是
zsh
这样做是为了通知您前面的命令没有包含终止换行符。您可以通过
echo-n abc
看到相同的行为。