c结构中无法输入带空格的字符串

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

我想编写一个程序来生成学生成绩列表。但在这个中,我只能插入名称的第一部分。其余部分被跳过。我查看了大多数关于这个问题的论坛,但它仍然发生。如果可以的话请帮忙。

// mark list using struct

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

struct mlist { char name[30]; int cs; int maths; int eng; int total; float perc; };

void main() { int n, i;
printf("How many Students? : ");
scanf("%d", &n);

struct mlist std[n];
struct mlist *ptr = std;

printf("Marks out of 100");

for (i = 0; i < n; i++)
{
    printf("\n\nEnter details of Student %d ==>\n", i + 1);
    printf("Enter Name : ");
    scanf("%s", ptr->name);
    printf("Enter Computer Science Marks : ");
    scanf("%d", &ptr->cs);
    printf("Enter Mathematics Marks : ");
    scanf("%d", &ptr->maths);
    printf("Enter English Marks : ");
    scanf("%d", &ptr->eng);
    ptr++;
}

ptr = std;
for (i = 0; i < n; i++)
{
    printf("\n---------------------------------\n");
    printf("Name : %s\n", ptr->name);
    printf("Computer Science : %d\n", ptr->cs);
    printf("Mathematics : %d\n", ptr->maths);
    printf("English : %d\n", ptr->eng);
    ptr->total = ptr->cs + ptr->maths + ptr->eng;
    ptr->perc = (float)ptr->total / 300 * 100;
    printf("Total %d with %.2f%%\n", ptr->total, ptr->perc);
    ptr++;
}
}
c struct gets
1个回答
0
投票

两个不错的选择包括:

  1. 使用不跳过空格的格式字符串“%[^ ]”,
  2. 使用读取一行文本的函数,如
    fgets()
    (注意;fgets 包含
    '\n'
    ,因此您可能需要沿着这些行删除它:
    s[strcspn(s, "\n")] = '\0';
© www.soinside.com 2019 - 2024. All rights reserved.