Printf 在行尾插入 %

问题描述 投票:0回答:5

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

有什么帮助吗?

c printf
5个回答
15
投票

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

在输出中添加换行符:

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

这应该会导致提示按照您的预期打印在下一行。


4
投票

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;
}

0
投票

由于您尚未输出新行 - 即您的 shell 提示字符在指定输出之后显示。试试

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


0
投票

在您的 zsh shell 中运行此命令行

PROMPT_EOL_MARK=''
,这应该足以修复它。


0
投票

PROMPT_EOL_MARK=''

将此行添加到您的 .zshrc 文件中。

© www.soinside.com 2019 - 2024. All rights reserved.