Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.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
单独读取数据fscanf_C_File_Scanf - Fatal编程技术网

单独读取数据fscanf

单独读取数据fscanf,c,file,scanf,C,File,Scanf,我正试图从文件中读取数字。该文件具有以下格式: 2 4 5 7 3 2 4 7 我尝试使用fscanf收集换行符之前的所有数字,并将数字存储在数组中,第二行也是如此。但是直接从第二行开始不会再次开始并将其存储在另一个数组中。是否可以使用fscanf执行此操作 int main(void) { FILE* fp; int *vec = malloc(sizeof(int)*6); int *vec_2 = malloc(sizeof(int)*6); int ro

我正试图从文件中读取数字。该文件具有以下格式:

2 4 5 7
3 2 4 7
我尝试使用
fscanf
收集换行符之前的所有数字,并将数字存储在数组中,第二行也是如此。但是直接从第二行开始不会再次开始并将其存储在另一个数组中。是否可以使用
fscanf
执行此操作

int main(void)
{
    FILE* fp;
    int *vec = malloc(sizeof(int)*6);
    int *vec_2 = malloc(sizeof(int)*6);
    int row, i;

    fp = fopen("vector.txt","r");

    for(i = 0; i < row; i++) //I don't know how to read until newline
        fscanf(fp, "%d", &vec[k]); //here store the first row in the array

    for(i = 0; i < row; i++)
       fscanf(fp, "%d", &vec_2[i]); //start reading here from the second row

    free(vec);
    free(vec_2);
    return 0;
}
int main(无效)
{
文件*fp;
int*vec=malloc(sizeof(int)*6);
int*vec_2=malloc(sizeof(int)*6);
int row,i;
fp=fopen(“vector.txt”,“r”);
for(i=0;i
行必须初始化为6,也可能是col,您可以使用以下二维数组

int main()
{
    FILE* fp;
    int **vec;
    int row = 6, col = 6, i, j;
    vec = malloc(sizeof(int *)*row); // allocates space for each row
    for (i = 0; i < row; i++) {
     vec[i] = malloc(sizeof(int)*col); // now allocate space for each cell within a row
    }
    fp = fopen("vector.txt","r");

    for(i = 0; i < row; i++) {
     for (j=0; j < col; j++) {
       fscanf(fp, "%d", &vec[i][j]); // read ith row, jth col
     }
    }

    vec = malloc(sizeof(int *)*row);
    for (i = 0; i < row; i++) {
       free(vec[i]);
    }    
    free(vec);
    return 0;
}
intmain()
{
文件*fp;
int**vec;
int行=6,列=6,i,j;
vec=malloc(sizeof(int*)*行);//为每行分配空间
对于(i=0;i
int main(无效){
文件*fp;
int cols=6;
int*vec_1=malloc(sizeof(int)*cols);
int*vec_2=malloc(sizeof(int)*cols);
inti,i1,i2;
char ch;
fp=fopen(“vector.txt”,“r”);
对于(i1=0;i1 fgScript())< /> > 

此解决方案适用于N行和用户可选择的列宽

#define MAX_INT_WIDTH (sizeof (int) * CHAR_BIT/3 + 3)

int **Read_Lines_Of_Numbers(FILE* inf, size_t Expected_Row_Width) {
  int **Row = NULL;
  size_t RowCount = 0;
  size_t RowSize = 0;
  char buf[Expected_Row_Width * (MAX_INT_WIDTH + 1) + 2];
  while (fgets(buf, sizeof buf, inf) != NULL) {
    if (RowCount >= RowSize) {
      RowSize = (RowSize + 1) * 2; // Double size
      Row = realloc(Row, RowSize * sizeof *Row);  // OOM checking omitted
    }
    Row[RowCount] = calloc(Expected_Row_Width, sizeof *Row[RowCount]); // OOM checking omitted
    size_t i;
    char *p = buf;
    for (i = 0; i < Expected_Row_Width; i++) {
      int n;
      if (sscanf(p, "%d %n", &Row[RowCount][i], &n) != 1)
        break;
      p += n;
    }
    if (*p || i != Expected_Row_Width) { // Bad data on line
      free(Row);
      return NULL;
    }
    RowCount++;
  }
  Row = realloc(Row, (RowCount + 1) * sizeof *Row);  // OOM checking omitted
  Row[RowCount] = NULL;
  return Row;
}

int main(void) {
  FILE *inf = fopen("c:/tmp/vector.txt", "r");
  size_t Width = 4;
  int **Data = Read_Lines_Of_Numbers(inf, Width);
  fclose(inf);

  if (Data) {
    size_t i;
    for (i = 0; Data[i]; i++) {
      size_t j;
      for (j = 0; j < Width; j++) {
        printf(" %d", Data[i][j]);
      }
      fputc('\n', stdout);
    }
    free(Data);
  }
  return 0;
}
#定义最大整数宽度(sizeof(INT)*字符位/3+3)
int**Read\u line\u Of \u number(文件*inf,大小\u t预期行宽){
int**Row=NULL;
大小\u t行计数=0;
大小\u t行大小=0;
字符buf[预期行宽*(最大行宽+1)+2];
while(fgets(buf,sizeof buf,inf)!=NULL){
如果(行数>=行大小){
RowSize=(RowSize+1)*2;//大小加倍
Row=realloc(Row,RowSize*sizeof*Row);//省略OOM检查
}
行[RowCount]=calloc(预期的行宽度,sizeof*行[RowCount]);//忽略OOM检查
尺寸i;
char*p=buf;
对于(i=0;i
是的,这是可能的。此外,如果行数固定且已知,则可以执行fscanf(文件“%d%d%d%d”、&a、&b、&c和&d)
。稍等片刻,你就可以开始了。但我的目的是将数字存储在一个数组中。你想为每一列创建一个数组,还是为整个文件创建一个数组?我想将第一行存储在一个数组中,第二行存储在另一个数组中。请发布你尝试过的代码,有很多信息你都不知道。1)
new int[col]
C
中不起作用。建议
vec[i]=malloc(col*sizeof*vec[i]);
2)不清楚第二个
vec=malloc(sizeof(int*)*row)的用法;
#define MAX_INT_WIDTH (sizeof (int) * CHAR_BIT/3 + 3)

int **Read_Lines_Of_Numbers(FILE* inf, size_t Expected_Row_Width) {
  int **Row = NULL;
  size_t RowCount = 0;
  size_t RowSize = 0;
  char buf[Expected_Row_Width * (MAX_INT_WIDTH + 1) + 2];
  while (fgets(buf, sizeof buf, inf) != NULL) {
    if (RowCount >= RowSize) {
      RowSize = (RowSize + 1) * 2; // Double size
      Row = realloc(Row, RowSize * sizeof *Row);  // OOM checking omitted
    }
    Row[RowCount] = calloc(Expected_Row_Width, sizeof *Row[RowCount]); // OOM checking omitted
    size_t i;
    char *p = buf;
    for (i = 0; i < Expected_Row_Width; i++) {
      int n;
      if (sscanf(p, "%d %n", &Row[RowCount][i], &n) != 1)
        break;
      p += n;
    }
    if (*p || i != Expected_Row_Width) { // Bad data on line
      free(Row);
      return NULL;
    }
    RowCount++;
  }
  Row = realloc(Row, (RowCount + 1) * sizeof *Row);  // OOM checking omitted
  Row[RowCount] = NULL;
  return Row;
}

int main(void) {
  FILE *inf = fopen("c:/tmp/vector.txt", "r");
  size_t Width = 4;
  int **Data = Read_Lines_Of_Numbers(inf, Width);
  fclose(inf);

  if (Data) {
    size_t i;
    for (i = 0; Data[i]; i++) {
      size_t j;
      for (j = 0; j < Width; j++) {
        printf(" %d", Data[i][j]);
      }
      fputc('\n', stdout);
    }
    free(Data);
  }
  return 0;
}