0

我正在尝试编写一个程序,它应该读取一行并将其内容存储在一个数组中,因此它需要逐行读取并读取一行中的不同字符。例如我的输入是

4 6
0 1 4
0 2 4
2 3 5
3 4 5

前两个字符将确定其他内容,我需要读取一行,以便可以在数组中写入 0 1 4 并在另一个数组中写入 0 2 4。

#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <list>
#include <iterator>

#define BUFFER_SIZE 50

int main()
{       
using namespace std;

int studentCount, courseCount;
FILE *iPtr;
iPtr = fopen("input.txt", "r");
if(iPtr == NULL){ printf("Input file cannot be opened!\n"); return 0; }

fseek(iPtr, 0, SEEK_SET);
fscanf(iPtr, "%d", &studentCount);
fscanf(iPtr, "%d", &courseCount);

list <int> S[studentCount]; // an array of linked lists which will store the courses
char buffer[BUFFER_SIZE];
char temp[BUFFER_SIZE];
int data;
int x=0, counter=0; // x traces the buffer

fgets(buffer, BUFFER_SIZE, iPtr);
while( buffer[x] != '\0')
{
   if( isspace(buffer[x]) ) counter++;
   x++;
}
printf("%d\n", counter);

fflush(stdin);
getchar();
fclose(iPtr);
return 0;
}

当我调试并遵循缓冲区 [x] 的值时,我发现当 x=0 时它总是具有值“10 \n”,而当 x=1 时它总是具有值“0 \0”。我该如何解决这个问题,或者有没有更好的逐行阅读方法?我还需要一行中的数据数量,因此仅使用 fgets 或 getline 是不够的。

4

1 回答 1

0

即使它有效,将 C 中基于 FILE* 的 I/O 与 C++ 混合通常也是一个坏主意,它看起来很难看,并且开发人员看起来好像不知道自己在做什么。你要么直接做 C99,要么直接做 C++11,但不能同时做两者。

这是 C++ 的答案:

#include <fstream>
...
std::ifstream infile("thefile.txt");
int ha,hb;
infile >> ha >> hb;
// do whatever you need to do with the first two numbers
int a, b, c;
while (infile >> a >> b >> c)
{
    // process (a,b,c) read from file
}

这是 C 的答案:

fp = fopen("thefile.txt","r");
// do whatever you need to do with the first two numbers
fscanf("%d %d",&ha,&hb);
int a, b, c;
while(fscanf(fp,"%d %d %d",&a,&b,&c)==3){
        // process (a,b,c) read from file
}
于 2013-05-22T20:33:34.010 回答