行を読み取ってその内容を配列に格納するプログラムを作成しようとしているため、行ごとに読み取り、行内のさまざまな文字も読み取る必要があります。たとえば、私の入力は
4 6
0 1 4
0 2 4
2 3 5
3 4 5
最初の 2 文字で何かが決まるので、配列に 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;
}
buffer[x] の値をデバッグして追跡すると、x=0 の場合は値が常に「10 \n」になり、x=1 の場合は「0 \0」になることがわかります。どうすればこれを修正できますか、または行ごとに読むためのより良い方法はありますか? 1 行のデータ数も必要なので、fgets や getline を使用するだけでは十分ではありません。