2013-05-22 3 views
-1

Мне нужно написать программу, которая принимает один аргумент командной строки. Аргументом должно быть имя файла для открытия для чтения (И если аргумент не указан или файл не может быть открыт, напечатайте сообщение об ошибке).Если бы у меня был текстовый файл значений, как бы я прочитал этот файл?

Программа открывает файл и считывает каждую строку до тех пор, пока не будет достигнута EOF. Каждая строка в файле имеет два двойных значения, представляющих точку на плоскости координат. Для каждой из строк читайте два значения, создайте точку и напечатайте эту точку, если она находится в первом квадранте плоскости координат. Я немного смущен, что это означает, когда он говорит «один аргумент командной строки», что это значит? Я попробовал написать код для программы, но я не уверен, правильно ли я это сделал.

Когда я пытаюсь скомпилировать мой код, он продолжает давать мне такие ошибки:

file.c:3: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token 
file.c:14: error: expected ‘)’ before ‘*’ token 

А вот мой код:

#include "point.h" 

FILE *open_file(char const name[], char const mode[]) 
{ 
    FILE *file = fopen(name, mode); 

    if (file == NULL) 
    { 
     perror(name); 
    } 
    return file; 
} 

void point_in_Q1(FILE *in, FILE *out) 
{ 
    double x, y; 
    struct point p; 
    int check; 

    p = create_point(x, y); 

    while (check != EOF) 
    { 
     if (p.x >= 0 && p.y >= 0) 
     { 
     fprintf(out, "%lf%lf", x, y); 
     check = fscanf(in, "%lf%lf", &x, &y); 
     } 
    } 
} 

Еще одна вещь, что я запутался о том, если я имел файл со значениями для координатных точек с именем «test_points.c», я должен был бы поместить это в fopen (имя, режим)? (Вместо «имя»).

+3

'#include ' – piokuc

ответ

2

компилятор не будет знать, что FILE, если вы этого не сделаете:

#include <stdio.h> 
2

Проблемы:

I. Вы используете check переменная неинициализированным;

II. while (!eof) - почти всегда неправильный подход к чтению файла;

III. Ошибки компилятора нам нелегко разрешить без предоставления файла заголовка.

IV. К вашему последнему вопросу: очевидно, вы используете имя того файла, который содержит данные (что еще?).

+0

Итак, когда я включаю имя файла, как бы его указать? Я попробовал просто ввести «test_points» вместо «name» в строках 2 и 6, но компилятор все еще жаловался. Я немного смущен тем, как передать файл функции fopen. – Karen

+0

@Karen 'FILE * f = fopen (" test_points.txt "," r ");' –

+0

Если компилятор все еще жалуется на то, что «test_points» не объявлен, как бы объявить его? Я знаю, что для объявления двойника мы бы сказали: double a; и я знаю, что для целого числа мы бы сказали int x; ... но как бы объявить текстовый файл? – Karen

1

Ваш while цикл кажется проблематичным, кроме того, что вам не хватает #include <stdio.h>. Если условие if не выполнено, вы останетесь в цикле навсегда.

Возможно, вы переместили fscanf из области if. Кроме того, вам потребуется перестроить p на основе значений, считанных.

+0

Собственно, подождите ... возможно ли написать вспомогательную функцию, чтобы вернуть значения для точек, если они оба положительные (в первом квадранте)? И тогда я мог бы вызвать эту функцию в point_in_Q1, чтобы немного упростить этот блок кода ?? – Karen

+0

Несомненно, вы можете создать вспомогательную функцию и, возможно, проверить значения для того, чтобы быть положительными. – unxnut

+0

Итак, в моей вспомогательной функции я проверил px и py, чтобы увидеть, было ли это положительно (потому что у меня есть структурная точка p и внутри структурной точки есть поля double x и y), и я вернул p, если это было положительно , Но, в моем заявлении, я не уверен, что вернуть, если это отрицательно ... – Karen

Смежные вопросы