首页 > 解决方案 > 如何将名字和姓氏作为一个并打印在文件中?

问题描述

在这段代码中,我面临一个问题,即每当我尝试输入firstlast名称时,它只会在文件中打印first名称。但我也想打印last名字。不应删除两个单词之间的空格。相反,第一个和最后一个应该被视为一个。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {
    FILE *fp = fopen("new.csv", "w");
    char name[50];

    printf("Enter your name: ");
    scanf("%s", name);
    fprintf(fp, "%s", name);

    fclose(fp);

    return 0;
}

标签: cprintf

解决方案


如果您使用%sfscanf请阅读直到出现空白字符,在名字之后停止。

如果该行没有其他内容,例如在用户按下之前Enter,您可以使用fgets阅读整行。那里的参数是文件流,指向字符数组的指针及其大小:

char name[50];
fgets(stdin, name, sizeof(name));

如果你仍然想使用 scanf,你也可以使用%[^\n]而不是这里%s提到的:

char name[50];
scanf("%49[^\n]", name);

为了防止缓冲区溢出,您应该scanf只使用缓冲区大小减去直接写入之后的一%(定义最大字段宽度)。

如果名字和姓氏之后的行中还有其他数据,您可以将它们单独读取并在之后将它们放在一起:

#include <stdio.h>

int main() {
        char firstName[50];
        char lastName[50];
        scanf("%49s %49s", firstName, lastName);

        char name[50];
        snprintf(name, sizeof(name), "%s %s", firstName, lastName);

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

推荐阅读