我正在读取从txt文件到数组的成绩列表。它在读取用户输入时工作正常,但在从文件扫描时我无法读取每一行。学生人数多变。每名学生的成绩数量是可变的。我可以毫不费力地阅读学生人数和作业数量,但是当从文件中读取时,我无法从每个学生的每一行中提取int(成绩)。输入可以像a或b(或任何更大数量的学生/作业):
txt-example1(包括和之后的注释是我自己的,而不是在txt文件中)
2 //number of students
3 //the number of grades per student (will match the number of grade rows below)
theo alvin //the number of names will match the number of students
75 60
89 90
79 95
TXT-示例2
3
4
theo alvin simon
78 85 90
85 96 76
77 99 100
88 55 92
我可以将名称放入2d数组的1维(我稍后会使用第二维来打印 - 该部分没有问题)。我想把等级变成二维数组。这就是我所拥有的
#include<stdio.h>
#include<string.h>
int numStus;
int numGrades;
int main()
{
FILE* inputFile;
char stuNames[numStus][10];
int grades[numGrades][numStus];
inputFile = fopen("testData.txt","r"); //assume inputFile has data from Ex 1 or 2 above
fscanf(inputFile,"%d",&numStus);
fscanf(inputFile,"%d",&numGrades);
int i;
int j;
for (i=0; i<numStus; i++)
{
fscanf(inputFile,"%s",&stuNames[i]);
}
//here is where I'm having trouble
for(i=0;i<numGrades;i++)
{
for(j=0;j<numStus; j++)
{
//I want to use fscanf, but don't know how to account for carriage returns to iterate into next part of array
}
}
}
从用户输入获取时有用:
int i;
int j;
int k;
for (i=0; i<numGrades; i++)
{
for (j=0; j<numStus; j++)
{
printf("Enter grade for Assignemnt %d for ",i)
for(k=0;k<10;k++)
{
printf("%c",stuNames[j][k]);
}
scanf("%d",&grades[i][j]);
}
}
上面的部分适用于用户输入等级。从文件中获取相同的输入时,我不确定如何将等级变为适当的尺寸。关于如何考虑换行/ CR以增加阵列的任何建议都将非常感激。感谢。
答案 0 :(得分:1)
stuNames
可以在嵌套循环中使用,通常用于读取单个值,因为carrige返回被作为空格跳过,例如:grades
但是,只有在阅读numStus
和numGrades
后才能初始化数组...
fscanf(inputFile,"%d",&numStus);
char stuNames[numStus][10];
fscanf(inputFile,"%d",&numGrades);
int grades[numGrades][numStus];
...
和ManagementObject
,例如:
mySearcher.Get()
ANSI C中不允许使用该技巧。在这种情况下,应使用动态内存分配。
答案 1 :(得分:0)
你比你想象的要早得多。在声明阵列时,不能使用未初始化的变量。在您的工作示例中,您不会显示您如何分配阵列。他们是固定的大小?无论你做了什么,都可能适用于你的新计划。
答案 2 :(得分:0)
您首先需要阅读学生数量和成绩数量。
像int foo;
这样未初始化的变量具有“随机”值。
您需要初始化变量,如int foo = 0;
。
了解这一点可以逐步分析您的代码。
int numStus; //numStus gets random value
int numGrades; //numGrades gets random value
int main()
{
FILE* inputFile;
char stuNames[numStus][10]; //random amount gets generated
int grades[numGrades][numStus]; //variable gets random value
fscanf(inputFile,"%d",&numStus); //numStus gets actual value
fscanf(inputFile,"%d",&numGrades); //numGrades gets actual value
C是一种按顺序处理事物的语言。 这意味着数组保持大小已经给出。
可以通过切换这样的语句来修复代码:
int numStus; //numStus gets random value
int numGrades; //numGrades gets random value
int main()
{
FILE* inputFile;
fscanf(inputFile,"%d",&numStus); //numStus gets actual value
fscanf(inputFile,"%d",&numGrades); //numGrades gets actual value
char stuNames[numStus][10]; //array of wanted size gets created
int grades[numGrades][numStus]; //random amount gets
我希望这会有所帮助,如果你有任何问题可以问他们