#include <stdio.h>
#include <conio.h>
#define STUD 3
struct students {
char name[30];
int score;
int presentNr;
} student[STUD];
void main() {
for (int i = 1; i <= STUD; i++) {
printf("Name of the student %d:\n", i);
scanf("%[^\n]s", student[i].name);
printf("His score at class: ");
scanf("%d", &student[i].score);
printf("Number of presents at class: ");
scanf("%d", &student[i].presentNr);
}
getch();
}
嗨,大家好!
我想在结构中存储学生的姓名和他在课堂上的分数。
在第一个循环中,我可以在变量“ name”中存储多个单词,但是在第二个循环中,它会跳过。
最佳答案
第一:您需要从零(i = 0
)开始循环,因为C数组从零开始。
也就是说,我想您的问题是因为最后一个scanf()
在stdin
缓冲区中留下了换行符。您可以尝试以下代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define STUD 3
struct students {
char name[30];
int score;
int presentNr;
} student[STUD];
void clean_stdin(void)
{
char c;
do c = getchar(); while (c != '\n' && c != EOF);
}
int main() {
for (int i = 0; i < STUD; i++) {
printf("Name of the student %d:\n", i + 1);
fgets((char*)&student[i].name, 30, stdin);
// Remove the line break at the end of the name
student[i].name[strlen((char*)&student[i].name) - 1] = '\0';
printf("His score at class: ");
scanf("%d", &student[i].score);
printf("Number of presents at class: ");
scanf("%d", &student[i].presentNr);
// cleans stdin buffer
clean_stdin();
}
getchar();
}
注意:有一个内置函数(
fflush()
)刷新输入缓冲区,但有时由于某种原因它不起作用,因此我们使用自定义的clean_stdin()
函数。关于c - 字符串C中的多个单词,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40579208/