Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C语言中将一个int从文本文件读入数组_C - Fatal编程技术网

在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()