C 将文件中的字符数组读入二维数组

C 将文件中的字符数组读入二维数组,c,fopen,C,Fopen,当我试图从一个包含10个方程的文件中将方程(如3+5/6)读入一个二维数组时,在以下方法中遇到了问题 int count=1; void read(){ int i; int j; FILE *file = fopen("C:\\Users\\Sara\\Desktop\\Project2\\input", "r"); if(file == NULL){ printf("Unable to open file"); }else{ while(!feof(fi

当我试图从一个包含10个方程的文件中将方程(如3+5/6)读入一个二维数组时,在以下方法中遇到了问题

int count=1;
void read(){
  int i;
  int j;
  FILE *file = fopen("C:\\Users\\Sara\\Desktop\\Project2\\input", "r");

  if(file == NULL){
    printf("Unable to open file");
  }else{
    while(!feof(file)){
      for (i=0; i <=20; i++){
        for (j=0;j<=100;j++){
          if (fscanf(file,"%c", &array[i][j]) < 1) break;
          printf("Equation %d : %s \n", count, array[i]);
          count++;
        }
      }
    }
  }
  fclose(file);
}
int count=1;
无效读取(){
int i;
int j;
FILE*FILE=fopen(“C:\\Users\\Sara\\Desktop\\Project2\\input”,“r”);
if(file==NULL){
printf(“无法打开文件”);
}否则{
而(!feof(文件)){

对于(i=0;i,您的代码存在一些问题:


  • 您没有说明数组是如何定义的,但我假设它是
    array[20][100]
    。有效输入分别为0到19和0到100,上限在C中是独占的。您的循环看起来像
    (I=0;您能描述一下您的问题吗?您似乎读取了
    数组[0]中的所有行),因为您只在文件的末尾出现“代码>中断<代码>。您还应该检查新的行字符<代码> \n′/COD>。并且考虑使用<代码> GETC而不是<代码> FSCANF读取字符。或者,请考虑使用<代码> FGES。@ MoeMm,我怎样才能使每个方程存储在不同的索引中?我应该检查新行字符吗?如果我想在另一个函数中使用方程呢?就像在你的代码中一样,
    array
    是一个全局变量,你可以从同一个文件的其他地方访问。我试图创建一个函数来检查方程,检查它们是否有效,但除了第一个方程之外,它不需要void checkErrors(char array[20][100]){int l;int m;for(l=0;l请在这里寻求帮助之前了解有关字符串的更多信息。同样,有很多地方是错误的。(1)不要在固定边界上循环。
    l
    应运行到
    count
    (或
    read
    的返回值);在遇到terinating null后,
    m
    上的循环应该停止。之后的所有chacatres都可能包含garabge,并且可能包含一个美元符号。(2)字符串的
    %s
    格式需要一个C字符串,即
    char*
    作为参数。您传递
    数组,即
    char[20][100]
    字符(*)[100]
    ;请传递
    数组[l]
    (3)不要打印整个字符串(重复)在内部循环中。我不知道你到底想做什么,但一次处理一个方程式可能更容易:阅读一个方程式,检查它,评估它。阅读下一个方程式,等等。这样你就可以处理一维汽车阵列,这可能会更清楚。
    int read(const char *fn)
    {
        int i, j;
        FILE *file = fopen(fn, "r");
    
        if (file == NULL) {
            fprintf(stderr, "Unable to open file %s.\n", fn);
            return -1;
        }
    
        i = 0;
        j = 0;
    
        while (i < 20) {
            int c = getc(file);
    
            if (c == EOF) {
                /* End of file: stop reading */
                array[i][j] = '\0';
                break;
            }
    
            if (c == '\n') {
                /* New line: Begin new line and reset column counter */
                array[i][j] = '\0';
                j = 0;
                i++;
            } else {
                if (j < 100 - 1) array[i][j++] = c;
            }
        }
    
        fclose(file);        
        return i;
    }