чтение данных из файла до конца строки в C / C++
обычно Читать до конца файла, но меня интересует, как я могу читать данные (ряд чисел) из текстового файла до конца строка? Я получил задачу прочитать несколько серий чисел из файла, которые расположены в новых строках. Вот пример ввода:
1 2 53 7 27 8
67 5 2
1 56 9 100 2 3 13 101 78
первая серия: 1 2 53 7 27 8
второй: 67 5 2
третий: 1 56 9 100 2 3 13 101 78
Я должен прочитать их отдельно из файла, но каждый до конца строки. У меня есть такой код:
#include <stdio.h>
FILE *fp;
const char EOL = '';
void main()
{
fp = fopen("26.txt", "r");
char buffer[128];
int a[100];
int i = 0;
freopen("26.txt","r",stdin);
while(scanf("%d",&a[i])==1 && buffer[i] != EOL)
i++;
int n = i;
fclose(stdin);
}
он читает до конца файла, поэтому он не делает совсем то, что я ожидал. Что вы предлагаете?
2 ответов
использовать fgets () чтобы прочитать полную строку, затем разобрать строку (возможно, с strtol()).
#include <stdio.h>
#include <stdlib.h>
int main(void) {
char buffer[10000];
char *pbuff;
int value;
while (1) {
if (!fgets(buffer, sizeof buffer, stdin)) break;
printf("Line contains");
pbuff = buffer;
while (1) {
if (*pbuff == '\n') break;
value = strtol(pbuff, &pbuff, 10);
printf(" %d", value);
}
printf("\n");
}
return 0;
}
вы можете посмотреть на код работает в ideone.
\n должен быть escape для новой строки, попробуйте это вместо
const char EOL = '\n';
вы заставили его работать? это должно помочь:
#include <stdio.h>
FILE *fp;
const char EOL = '\n'; // unused . . .
void main()
{
fp = fopen("26.txt", "r");
char buffer[128];
int a[100];
int i = 0;
freopen("26.txt","r",stdin);
while(scanf("%i",&a[i])==1 && buffer[i] != EOF)
++i;
//print values parsed to int array.
for(int j=0; j<i; ++j)
printf("[%i]: %i\n",j,a[j]);
fclose(stdin);
}