【发布时间】:2024-01-13 15:36:01
【问题描述】:
我正在尝试阅读有关在 for 循环中使用 scanf() 的学生的信息(N 次 -> N 由用户输入),但 for() 循环不止于此......根本没有停止。我已经尝试了字符串格式的所有组合,但似乎没有任何效果。
这是我的代码:
#include <stdio.h>
#include <string.h>
typedef struct STUDENT_CONSTRUCTOR {
char first_name[35], last_name[35];
char gender;
int grade;
} student;
int main(void) {
int N; // number of entries
student list[N];
printf("Number of entries: "); scanf("%d", &N);
for (int i = 0; i<N; i++) {
printf("<Entry %d>\n", i);
scanf("%d %c %s %s\n", &list[i].grade, &list[i].gender, list[i].first_name, list[i].last_name);
}
return 0;
}
我想输入如下序列:
10 M Mateas Mario,其中“10”是平均成绩,“M”是性别,“Mario”是我的名字,“Mateas”是我的姓。
N 被正确读取,list[] 数组中的数据也被正确读取。
list[] 基于包含所有这些数据类型的结构。
不过,每当我为 N 输入特定值(例如 3、4、5 等)时,<Entry ...> 总是超出该数字。在告诉我 scanf() 已弃用之前,我想知道是否有可能在不删除 scanf() 函数的情况下修复此代码。我不想使用fgets(),因为我不知道输入包含的最大字符数。
任何帮助将不胜感激。谢谢。
【问题讨论】:
-
scanf()没有被弃用,但一些编码人员不喜欢使用它。但是there are ways在事先不知道行长的情况下使用fgets() -
而
scanf()通常是有问题的,但我认为没有任何理由认为它是造成这里问题的原因。 -
啊。当
student list[N];出现在之前N的值已输入时,您认为student list[N];会做什么? -
@JohnBollinger 哦,有问题。您可以将其发布为答案,以便我将其标记为已解决吗?非常感谢 :) 我的错
-
未定义的行为,投票关闭为错字。