Printf在行尾插入%

时间:2014-04-02 15:47:42

标签: c printf

我正在编写一个基本程序来学习如何在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%

任何帮助?

3 个答案:

答案 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);