Читайте в числах из файла в C - PullRequest
1 голос
/ 18 октября 2011

У меня есть файл с именем points.dat, который читает что-то вроде:
5
2 5
-1 18
0 6
1 -1
10 0

Первое число - это количество упорядоченных пар. Следующие 5 строк содержат эти упорядоченные пары. Что я могу сделать, чтобы прочитать по первому числу, определить, сколько существует точек (отсюда я могу malloc массив structs для хранения точек).

Моя проблема в том, что fgetc здесь на самом деле не работает. Что делать, если первое число состоит из двух цифр? Скажем, первое число - 10. fgetc получит только «1». Кроме того, fgets на самом деле не работает, так как вам нужно указать длину количества символов, которые вы хотите прочитать. То же самое относится и к fscanf.

Настоящая проблема возникает, когда приходит время получить упорядоченные пары. Я тоже понятия не имею, как это сделать. Пока я думаю только о том, чтобы взглянуть на строку: если он видит не пробелы или не '\ n's, он будет читать число как координату x точки 1. Цикл. Получить координату у. Как только он нажмет '\ n', он перейдет к следующей строке и начнет искать значения для хранения в следующем struct в массиве structs.

(При этом я также должен быть уверен, что atoi может преобразовать все это в целые числа ...).

Если у кого-то есть идеи, чтобы помочь, они ценятся.

Ответы [ 2 ]

5 голосов
/ 18 октября 2011

Для первой строки используйте int numValuesRead = fscanf(file, "%d", &totnums);

Затем используйте numValuesRead = fscanf(file, "%d %d", &num1, &num2);, чтобы прочитать другие строки.

fscanf возвращает количество прочитанных значений. Вы должны всегда проверять это.

4 голосов
/ 18 октября 2011
#include <stdio.h>
#include <stdlib.h>

typedef struct {
        int x, y;
} Point;

int main ()
{
        int numOf;
        Point *myPoints = NULL;
        FILE *myfile = fopen ("myfile.txt","r");
        if (myfile == NULL)
            perror ("Error opening file"); //or return 1;
        else
        {
            fscanf(myfile, "%d", &numOf);
            myPoints = (Point *)malloc(sizeof(Point) * numOf);
            while ( !feof (myfile) && numOf-- )
            {
                fscanf(myfile, "%d %d", &(myPoints[numOf].x), &(myPoints[numOf].y));
            }
        }
        fclose(myfile);
        //Do stuff with array
        free ((void *)myPoints);
        getchar();//Press enter to close debugger etc.
        return 0;
}

Извините за задержку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...