C语言 Printf在行尾插入%

wd2eg0qa  于 2023-11-16  发布在  其他
关注(0)|答案(5)|浏览(117)

我正在写一个基本的程序来学习如何在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%
有什么需要帮忙的吗?

t40tm48m

t40tm48m1#

在你的代码中没有任何东西可以解释这种行为,但是,如果你是从shell运行它的话,这很可能是你的shell提示符。
在输出中添加新行:

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

字符串
这应该会导致提示符打印在下一行,正如您所期望的那样。

ki0zmccv

ki0zmccv2#

stdout流是行缓冲的。这意味着输出不会出现在控制台上,直到输出一个新行或缓冲区已满。这可能是为什么你在屏幕上看到%的原因。'\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;
}

字符串

qcbq4gxm

qcbq4gxm3#

由于您没有输出一个新行-这是您的shell提示符显示在指定的输出之后。尝试printf("Hello, %s\n", name);

velaa5lx

velaa5lx4#

在你的zsh shell中运行这个命令行PROMPT_EOL_MARK='',这应该足以修复它。

xqk2d5yq

xqk2d5yq5#

PROMPT_EOL_MARK=''
将这一行添加到.zshrc文件中。

相关问题