c - 如何在字符中显示一个词?

标签 c

首先,程序要您输入学生姓名。当我想用 %s 在底部显示学生的名字时,xcode 总是告诉我用 %c 替换。你能告诉我如何在输入时显示学生姓名而不是使用 %c 的解决方案吗?谢谢。

#include <stdio.h>

void showthelastvalue () {
    char name1, name2, name3, name4;
    int value1a, value1b, value1c, value1d;
    int value2a, value2b, value2c, value2d;
    int value3a, value3b, value3c, value3d;
    int value4a, value4b, value4c, value4d;

    printf("\nenter student name-1 : ");
    scanf(" %s", name1);
    printf("enter student name-2 : ");
    scanf(" %s", name2);
    printf("enter student name-3 : ");
    scanf(" %s", name3);
    printf("enter student name-4 : ");
    scanf(" %s", name4);

    printf("\nEnter student grade-1 %s\n", name1);

    printf("grade ke 1 : ");
    scanf("%d", &grade1a);

    printf("grade ke 2 : ");
    scanf("%d", &grade1b);

    printf("grade ke 3 : ");
    scanf("%d", &grade1c);

    printf("grade ke 4 : ");
    scanf("%d", &grade1d);

    printf("\nEnter student grade- 2 %s\n", name2);

    printf("grade ke 1 : ");
    scanf("%d", &grade2a);

    printf("grade ke 2 : ");
    scanf("%d", &grade2b);

    printf("grade ke 3 : ");
    scanf("%d", &grade2c);

    printf("grade ke 4 : ");
    scanf("%d", &grade2d);

    printf("\nEnter student grade- 3 %s\n", name3);

    printf("grade ke 1 : ");
    scanf("%d", &grade3a);

    printf("grade ke 2 : ");
    scanf("%d", &grade3b);

    printf("grade ke 3 : ");
    scanf("%d", &grade3c);

    printf("grade ke 4 : ");
    scanf("%d", &grade3d);

    printf("\nEnter student grade- 4 %s\n", name4);

    printf("grade ke 1 : ");
    scanf("%d", &grade4a);

    printf("grade ke 2 : ");
    scanf("%d", &grade4b);

    printf("grade ke 3 : ");
    scanf("%d", &grade4c);

    printf("grade ke 4 : ");
    scanf("%d", &grade4d);

    printf("\nThe grade of 4 students: \n");
    printf(" %s %d %d %d %d\n", name1, grade1a, grade1b, grade1c, grade1d);
    printf(" %s %d %d %d %d\n", name2, grade1a, grade1b, grade1c, grade1d);
    printf(" %s %d %d %d %d\n", name3, grade1a, grade1b, grade1c, grade1d);
    printf(" %s %d %d %d %d\n", name4, grade1a, grade1b, grade1c, grade1d);

    averange1 = (grade1a + grade1b + grade1c + grade1d) / 4;
    averange2 = (grade2a + grade2b + grade2c + grade2d) / 4;
    averange3 = (grade3a + grade3b + grade3c + grade3d) / 4;
    averange4 = (grade4a + grade4b + grade4c + grade4d) / 4;

    printf("Last grade of 4 studentsgra :\n");
    printf("Last grade from student1 %s = %d\n", name1, averange1);
    printf("Last grade from student2 %s = %d\n", name2, averange2);
    printf("Last grade from student3 %s = %d\n", name3, averange3);

    printf("Last grade from student4 %s = %d\n", name4, averange4);
}

int main() {
    int choose;

    printf("Welcome!\n");


    do {
        printf("Choose anda :\n");
        printf("1. Show the last grade\n");
        printf("2. Show the grade\n");
        printf("3. Show the Table\n");
        printf("4. Exit\n");
        printf("\nWhat will you choose ? ");
        scanf("%d", &choose);

        switch (choose) {
            case 1:
                showthelastgrade ();
                break;

            case 4:
                printf("Thank you /001\n");
                break;
        }

    }
    while (choose != 5);
    return 0;
}

最佳答案

您正在将名称读取到单个 char 中,这就是 xcode 向您提供该消息的原因。您需要使用一个 char 数组。

最简单的方法是将您的声明更改为:

char name1[N], name2[N], name3[N], name4[N];

其中 N 是名称的最大长度。

然后您可以将所有 scanf 更改为:

scanf(" %s", name1); // & removed

作为 name1 等现在指向 char 数组的开始。

请注意,这本质上是一件冒险的事情,因为这意味着输入太长的名称可能会溢出缓冲区。

你最好使用 fgets,因为它允许你指定缓冲区的最大长度:

fgets(name1, N, stdin);

任何超过 N-1 个字符的内容都将被丢弃,而不是溢出您的缓冲区。

关于c - 如何在字符中显示一个词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22375885/

相关文章:

c - 这个表达式是什么意思,为什么编译?

c - 查找函数内数组的长度

c - http get请求与c中的https请求有何不同?

c - 为什么即使在函数返回后对单个指针所做的更改仍然存在

c - xv6: bootmain.c 读取eg() "round down to sector boundary"

java - 如何在用户计算机上启动本地端口(编辑问题)

c - 如何加载.exe中不同位置的.dll

c - 为什么回调函数的名字叫callback?

c++ - 为什么我的 8M L3 缓存对大于 1M 的阵列没有任何好处?

c - 向结构体传递 null