在C语言中将一个int从文本文件读入数组
我有一个如下格式的文本文件:在C语言中将一个int从文本文件读入数组,c,C,我有一个如下格式的文本文件: 100 0 10 1 101 6 10 1 102 8 4 1 103 12 20 1 104 19 15 1 105 30 5 1 106 35 10 1 我需要将这些数字分别放入数组pID[]、arrival[]、bursts[]和priority[]中。C不是我最强的语言,所以我在这方面遇到了一些困难 以下是我当前的代码: void readFile(int n, int pID[], int arrival[], int bursts[], int pri
100 0 10 1
101 6 10 1
102 8 4 1
103 12 20 1
104 19 15 1
105 30 5 1
106 35 10 1
我需要将这些数字分别放入数组pID[]、arrival[]、bursts[]和priority[]中。C不是我最强的语言,所以我在这方面遇到了一些困难
以下是我当前的代码:
void readFile(int n, int pID[], int arrival[], int bursts[], int priority[]){
FILE *file;
int i = 0;
file = fopen("Process.txt", "r");
//File format is pID, arrival, bursts, and priority
if (file){
while (!feof(file)){
pID[i] = fscanf(file, "%d ", &i);
arrival[i] = fscanf(file, "%d ", &i);
bursts[i] = fscanf(file, "%d ", &i);
priority[i] = fscanf(file, "%d ", &i);
}
fclose(file);
}
谢谢你的帮助 您以错误的方式使用了
feof
和fscanf
。我建议您一次从文件中读取一行,检查是否已读取,然后扫描缓冲区中的值,同时检查数组索引是否仍然正常,以及扫描的字段数是否正确
void readFile(int n, int pID[], int arrival[], int bursts[], int priority[]) {
FILE *file;
int i = 0;
char buffer[100];
file = fopen("Process.txt", "r");
if (file){
while (i < n && fgets(buffer, sizeof buffer, file) != NULL) {
if(sscanf(buffer, "%d%d%d%d", &pID[i], &arrival[i], &bursts[i], &priority[i]) != 4) {
exit(1); // or recovery strategy
}
i++;
}
fclose(file);
}
}
void readFile(int n,int pID[],int-arrival[],int-burns[],int-priority[])){
文件*文件;
int i=0;
字符缓冲区[100];
file=fopen(“Process.txt”、“r”);
如果(文件){
while(i
。“我做这件事有点困难”并不是很具体。请参阅。fscanf
返回成功扫描的项目数,而不是扫描值<代码>如果(fscanf(文件“%d”,&pID[i])!=1)退出(1)代码>抱歉,数组中的值与文件中的值不接近。谢谢你的文章。如果!feof(文件)不正确,在文件的每一行循环的正确方式是什么?请阅读postNote,对于交互式输入,格式字符串中的尾随空格是一个灾难;只有在用户在相关数据结束后键入一个非空字符(制表符、换行符)后,scanf()
操作才会返回。这意味着他们必须预测你下一步的要求——不好。非常感谢!这就解决了我的问题,所有的内容都是按应该的方式读取的。因此sscanf行正在检查以确保文件的每一行中有四个值,同时将相应的值放入数组中?对不起,我一直问这么多问题,我只是想完全理解这是如何解决我的问题的。是的,这是正确的。检查任何可以检查的东西总是一个好主意:不要为健壮的代码假设任何东西,尤其是当输入源可能不在您的控制范围内时。尽管注意:如果文本行中有4个以上的数字,这将忽略该文本行中的任何其他数据,但它将捕获任何不是数字的数据。如果数据为每行-->向上投票,则放弃fscanf()
并采用fgets()
。