Как обнаружить новую строку любого файла, используя программу C - PullRequest
1 голос
/ 26 апреля 2011

Я читаю файл целых чисел. Я хочу сохранить целые числа из каждой строки в новый массив. Для этого я хочу обнаружить новую строку файла. Если кто-нибудь знает это, пожалуйста, помогите.

Файл для чтения выглядит следующим образом

1 2 4 5 6
7 3 2 5 
8 3 
9 7 6 2 

Ответы [ 6 ]

8 голосов
/ 26 апреля 2011

Почему бы не использовать fgets(), чтобы получить по одной строке за раз из файла? Затем вы можете использовать sscanf() вместо fscanf() для извлечения целых чисел.

2 голосов
/ 26 апреля 2011
#include <stdio.h>
int main ( int argc, char **argv ) {
    FILE *fp = fopen ( "d:\\abc.txt", "r");
    char line[1024];
    char ch = getc ( fp );
    int index = 0;
    while ( ch != EOF ) {
        if ( ch != '\n'){
            line[index++] = ch;
        }else {
            line[index] = '\0';
            index = 0;

            printf ( "%s\n", line );
        }
        ch = getc ( fp );
    }


    fclose ( fp );

    return 0;
}
0 голосов
/ 06 сентября 2014
#include<stdio.h>
void main()
{
    FILE *p;
    int n;
    int s=0;
    int a[10];
    p=fopen("C:\\numb.txt","r");
    if(p!=NULL)
        printf("file opened");

    while((n=getc(p))!=EOF)
    {   if(n!=NULL && n!='\n')
      {
        printf("\n%d",n);
        a[s]=n;
        ++s;
      }
    }
fclose(p);
getchar();
}

Я не уверен в преобразовании int в char и наоборот, но программа работает для ненулевых чисел. Я пробовал на Visual Basic.

0 голосов
/ 02 августа 2014

Использование getc() для этого действия хорошо, но не забывайте, что getc() возвращает тип int. Повторный ввод в char "работает", но у вас может быть проблема с входным файлом не строгого ASCII, потому что EOF = -1 = 0xFF после повторного ввода в char (в большинстве компиляторов C), т.е. 0xFF символов определяются как EOF.

0 голосов
/ 26 апреля 2011

Используйте <a href="http://linux.die.net/man/3/fgets" rel="nofollow">fgets()</a> для чтения одной строки ввода за раз.Затем используйте <a href="http://linux.die.net/man/3/strtol" rel="nofollow">strtol()</a>, чтобы разобрать целое число, используя функцию «указатель конца», чтобы выяснить, где попробовать снова, и выполните цикл, пока вы не проанализируете все значения.

0 голосов
/ 26 апреля 2011

Если вы используете чтение char по char, то распознавание пробелов с помощью '32' и 'enter' по '13' и / или '10'

...