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中的结构fscanf_C_Arrays_File - Fatal编程技术网

文件C中的结构fscanf

文件C中的结构fscanf,c,arrays,file,C,Arrays,File,在文件中,我需要读取一些输入: 这是一个例子: 8 15 [1,1] v=5 s=4#o [4,2] v=1 s=9#x 问题是它无法正确读取此处的输入:[1,1]v=5s=4o 我使用printf的最后一行显示了一些随机数。我使用printf的最后一行显示了一些随机数 您看到的随机数是因为要打印的缓冲区尚未正确填充 此示例显示如何读取文件,使用读取行缓冲区,然后使用解析行中的前两个值。阅读代码注释了解其他一些技巧 int main(void)//minimum signature fo

在文件中,我需要读取一些输入:

这是一个例子:

8 15
[1,1] v=5 s=4#o
[4,2] v=1 s=9#x
问题是它无法正确读取此处的输入:[1,1]v=5s=4o 我使用printf的最后一行显示了一些随机数。

我使用printf的最后一行显示了一些随机数

您看到的随机数是因为要打印的缓冲区尚未正确填充

此示例显示如何读取文件,使用读取行缓冲区,然后使用解析行中的前两个值。阅读代码注释了解其他一些技巧

   int main(void)//minimum signature for main includes 'void'
    {
        int r = 0;
        int s = 0;
        char line[80] = {0};//{initializer for arrays}
        int p = 0;
        Tunel *tuneli = malloc(sizeof(*tuneli)*50);
        if(tuneli)//always test return of malloc before using it
        {       
            FILE *fin = fopen(".\\farbanje.txt", "r");
            if(fin)//always test return of fopen before using it
            {
                fgets(line, sizeof(line), fin);
                sscanf(line, "%d %d", &r, &s);
                while(fgets(line, sizeof(line), fin))
                {
                    sscanf(line, " [%d,%d]", &tuneli[p].red2, &tuneli[p].stupac2);
                    //note space  ^ here to read only visible characters
                    printf("[%d,%d]\n", tuneli[p].red2, tuneli[p].stupac2);//content is now populated corretly
                    p++;
                }
                fclose(fin);//close when finished
            }
            free(tuneli);//free when done to prevent memory leaks
        }
        return 0;
    }
我使用printf的最后一行显示了一些随机数

您看到的随机数是因为要打印的缓冲区尚未正确填充

此示例显示如何读取文件,使用读取行缓冲区,然后使用解析行中的前两个值。阅读代码注释了解其他一些技巧

   int main(void)//minimum signature for main includes 'void'
    {
        int r = 0;
        int s = 0;
        char line[80] = {0};//{initializer for arrays}
        int p = 0;
        Tunel *tuneli = malloc(sizeof(*tuneli)*50);
        if(tuneli)//always test return of malloc before using it
        {       
            FILE *fin = fopen(".\\farbanje.txt", "r");
            if(fin)//always test return of fopen before using it
            {
                fgets(line, sizeof(line), fin);
                sscanf(line, "%d %d", &r, &s);
                while(fgets(line, sizeof(line), fin))
                {
                    sscanf(line, " [%d,%d]", &tuneli[p].red2, &tuneli[p].stupac2);
                    //note space  ^ here to read only visible characters
                    printf("[%d,%d]\n", tuneli[p].red2, tuneli[p].stupac2);//content is now populated corretly
                    p++;
                }
                fclose(fin);//close when finished
            }
            free(tuneli);//free when done to prevent memory leaks
        }
        return 0;
    }

同意使用FGET更好 但是如果你想继续使用你目前的方法

#include <stdio.h>
#include <stdlib.h>

typedef struct{
  int red2;
  int stupac2;
  int visina;
  int sirina;
  char boja[10];
}Tunel;


int main(){
  int r, s, i;
  FILE*fin=fopen("farbanje.txt", "r");
  if(fin==NULL) {
    printf("error reading file\n");
    return 1;
  }
  Tunel *tuneli=(Tunel*)malloc(sizeof(Tunel)*50);
  fscanf(fin,"%d %d\n", &r,&s);
  printf("%d %d", r,s);

  int p=0;

  while (fscanf(fin, " [%d,%d]%*[^\n]", &tuneli[p].red2, &tuneli[p].stupac2) == 2)
  {
    p++;
  }

  fclose(fin);

  for(i=0;i<p;i++)
  {
    printf("[%d,%d]", tuneli[i].red2, tuneli[i].stupac2);
  }
}

同意使用FGET更好 但是如果你想继续使用你目前的方法

#include <stdio.h>
#include <stdlib.h>

typedef struct{
  int red2;
  int stupac2;
  int visina;
  int sirina;
  char boja[10];
}Tunel;


int main(){
  int r, s, i;
  FILE*fin=fopen("farbanje.txt", "r");
  if(fin==NULL) {
    printf("error reading file\n");
    return 1;
  }
  Tunel *tuneli=(Tunel*)malloc(sizeof(Tunel)*50);
  fscanf(fin,"%d %d\n", &r,&s);
  printf("%d %d", r,s);

  int p=0;

  while (fscanf(fin, " [%d,%d]%*[^\n]", &tuneli[p].red2, &tuneli[p].stupac2) == 2)
  {
    p++;
  }

  fclose(fin);

  for(i=0;i<p;i++)
  {
    printf("[%d,%d]", tuneli[i].red2, tuneli[i].stupac2);
  }
}

顶部的示例是您正在读取的文件的内容吗?如果你想从文件中读取int,你必须先进行一些解析,将数字与其他字符分开。你可能想使用一些库,也许上面的示例就是你正在读取的文件的内容?如果你想从文件中读取int,你必须先做一些解析,把数字和其他字符分开