首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在循环内使用指针后,文件中的行无法读取

在循环内使用指针后,文件中的行无法读取
EN

Stack Overflow用户
提问于 2017-09-13 01:08:43
回答 2查看 61关注 0票数 1

所以我试着从一个文件中读取一个矩阵(我相信有比我现在做的更好的方法)。我花了很长时间才弄清楚如何从文件中读取每个单词(即矩阵的每个条目),因此决定读取每一行,并使用我在stackexchange中找到的名为strtok的东西。

我的main()内部看起来像这样

代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
#include <malloc.h>
#include <time.h>
#include <string.h>

int main(){
    FILE *f;
    int nmatrix=3;
    int nmax=3;
    int something;
    int number, count, count2, i, j;
    srand(time(NULL));
    size_t len = 0;
    ssize_t read;
    char * line = NULL;
    char * pch;
    int ia;
    int (*B)[nmatrix][nmatrix] = malloc(nmatrix * nmatrix * sizeof(int));


    while(nmatrix<=nmax){
        // Creation of Matrix
        f = fopen("matrix.txt", "w");
        for(count = 1; count <= nmatrix; count ++){
            for(count2 = 1; count2 <= nmatrix; count2 ++){
                number = rand()%9;
                fprintf(f, "%s%d ", " ", number);
            }
            fprintf(f, "%s\n", " ");
        }
        fclose(f);

        // Reading Matrix
        f = fopen("matrix.txt", "r");
        i=0;
        while((read = getline(&line, &len, f)) != -1) {
            printf("%s\n", line);
            pch = strtok(line," ,.-");
            j=0;
            while (pch != NULL & j<nmatrix){
                ia= (int)*pch-48;
                *B[i][j]= ia;
                pch = strtok(NULL, " ,.-");
                j=j+1;
            }
            i=i+1;
        }
        fclose(f);

        nmatrix=nmatrix+1;
    }


    return 0;
}

terminal中的第一个输出是*B[i][j]= ia;行是否被擦除,第二个输出是擦除行。第一个输出读取文件中的所有行,第二个输出不读取最后一行。为什么?(输出看起来不同,因为矩阵是随机生成的)。

提前感谢

我对每件事都很陌生,特别是指针,所以如果有什么不能正确使用的,我将非常感谢你的评论。

EN

回答 2

Stack Overflow用户

发布于 2017-09-13 04:25:21

你有几个问题。您使用了&而不是&(这并没有真正影响它,但仍然是错误的),并且您在赋值中的指针是错误的。我更改了输出,以显示存储在矩阵中的内容,而不是读取的行。*B[i][j]= ia;需要为(*B)[i][j]= ia;

代码语言:javascript
复制
   // Reading Matrix
    f = fopen("matrix.txt", "r");
    i=0;
    while((read = getline(&line, &len, f)) != -1) {
        pch = strtok(line," ,.-");
        j=0;
        while (pch != NULL && j<nmatrix){
            printf("\n%d %d :", i, j);
            ia= (int)*pch-48;
            (*B)[i][j]= ia;
            printf("%d\n", (*B)[i][j]);
            pch = strtok(NULL," ,.-");
            j=j+1;
        }
        i=i+1;
    }
    fclose(f);
票数 0
EN

Stack Overflow用户

发布于 2017-09-13 03:32:27

你有很多错误:

  • 您的字符串,以中断当您创建矩阵时不插入矩阵的数字:“,.-”。必须插入这些符号才能在strtok中使用function.
  • should be &&而不是&在while语句
  • 中,文件末尾有一个额外的}。
  • 这两个创建矩阵的地方都应该从0开始,并使用
  • 初始化字符串行,而不是null。

int main(){

文件*f;int nmatrix=3;int nmax=3;int number,count,count2,i,j;srand( size_t (NULL));size_t len = 0;ssize_t读取;char * line = "";char * pch;int ia;int (*B)nmatrix =malloc(n矩阵*n矩阵*count2(Int));while(nmatrix<=nmax){ //创建矩阵f= fopen("matrix.txt","w");for(ssize_t= 0;count < nmatrix;count ++){ for(count2 = 0;count2

}

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46182058

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档