我正在编写一个基本程序来学习如何在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%
任何帮助?
答案 0 :(得分:5)
您的代码中没有任何内容可以解释此行为。但是,如果你从shell运行它,似乎可能是你的shell提示符。
在输出中添加换行符:
printf("Hello, %s\n", name);
这应该会导致提示在您预期的下一行打印。
答案 1 :(得分:1)
stdout
流是行缓冲的。这意味着在输出换行符或缓冲区已满之前,输出不会出现在控制台上。这可能是您在屏幕上看到%
的原因。 '\n'
会导致printf
立即在屏幕上打印输出。
请注意,如果输入字符串大于31
个字符,则scanf
将超出调用未定义行为的缓冲区name
。由于段错误,这可能会导致程序崩溃。您应该通过提供最大字段宽度来防范它,该字段宽度应该比数组长度小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;
}
答案 2 :(得分:0)
由于您尚未输出新行 - 这是您在指定输出后显示的shell提示符。试试printf("Hello, %s\n", name);