c - 为什么 printf() 在打印多个字符串 (%s) 时会留下换行符以及如何解决这个问题?

标签 c arrays string printf

我制作了一个接受字符串(名字/姓氏)的程序,但不是
Phil Snowken age 3 的典型输出,我得到的是
Phil
斯诺肯
3岁

#include <stdio.h>
#define N 10
struct data{
char fname[30];
char lname[30];
int age;
};

main()
{
    int i;
    struct data base[N];
    for(i=0;i<N;i++){
        printf("\n-------------------------");
        printf("\nPeople Data(%d remaining)\n",N-i);
        printf("---------------------------\n\n");
        printf("\nFirst Name ");
        fgets(base[i].fname,30,stdin);
        printf("\nLast Name ");
        fgets(base[i].lname,30,stdin);
        printf("\nAge ");
        scanf(" %d",&(base[i].age));
        fflush(stdin);
    }

    for(i=0;i<N;i++)
        printf("%s %s Year:(%d)",base[i].fname,base[i].lname,base[i].age);
    return 0;   
}

最佳答案

fgets() 使用输入的字符串读取换行符,因此每次您按下回车键时,它都会将 \n 也读入字符串(参见 man fgets )

你必须检查最后一个字符,如果它是 \n 将它更改为 \0,像这样:

size_t length = strlen(base[i].fname);
if (base[i].fname[length-1] == '\n')
    base[i].fname[length-1] = '\0';

关于c - 为什么 printf() 在打印多个字符串 (%s) 时会留下换行符以及如何解决这个问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21208274/

相关文章:

arrays - 最高百分比增加

c - 为什么我的指针数组返回一个 unicode 字符?

c - 使用 define 指令的 Square 不起作用

c - 动态阵列打印

java - 打印数组语句

c - 在运行时将一维数组视为二维数组

Javascript:用于排列管道分隔文本(或任何字符分隔文本)的快速脚本

string - 绳索数据结构权重是节点中的字符加上左子树或左右子树的权重?

c - mprotect 整个程序,运行危险代码

c - 从大型 C 库创建一个子集