2015-10-04 4 views
0

У меня проблема с fprintf в функции «менор», потому что данные не отображаются в выбранном файле, я не знаю, в чем проблема, пожалуйста, помогите, я думаю, что это ссылочный файл, но не идея.fprintf в Файл не найден

У меня проблема с fprintf в функции «менор», потому что данные не видны в выбранном файле, я не знаю, в чем проблема, пожалуйста, помогите, я думаю, что это ссылочный файл, но не идея

#include <stdio.h> 
    #include <stdlib.h> 
    #include <string.h> 


    typedef struct { 
     char * nombre; 
     char * editorial; 
     int valor; 
     int area; 
     int vendido; 
    } 
Libro; 

int conteo(FILE * _entrada); 
void datos(FILE * _entrada, Libro * _trabajo, int cantidad); 
void menor(FILE * _entrada, FILE * _salida, Libro * _trabajo, int cantidad); 

int main() { 
    FILE * entrada; 
    char ingreso[256]; 
    printf("Direccion del archivo de entrada \n"); 
    scanf("%255s", ingreso); 
    entrada = fopen(ingreso, "r"); 
    if (entrada == NULL) { 
     printf("No se pudo acceder al archivo de entrada \n"); 
     exit(1); 
    } 
    FILE * salida; 
    char final[256]; 
    printf("Direccion del archivo de salida \n"); 
    scanf("%255s", final); 
    salida = fopen(final, "r"); 
    if (salida == NULL) { 
     printf("No se pudo acceder al archivo de salida \n"); 
     exit(1); 
    } 
    int cantidad = conteo(entrada); 
    Libro * trabajo; 
    trabajo = (Libro *) malloc(sizeof(Libro) * cantidad); 
    datos(entrada, trabajo, cantidad); 
    menor(entrada, salida, trabajo, cantidad); 
    return 0; 
} 

int conteo(FILE * _entrada) { 
    char auxiliar1[100]; 
    int conteo = 0; 
    while (!feof(_entrada)) { 
     fgets(auxiliar1, 100, _entrada); 
     conteo++; 
    } 
    rewind(_entrada); 
    return (conteo/5); 
} 

void datos(FILE * _entrada, Libro * _trabajo, int cantidad) { 
    char auxiliar2[100]; 
    char * token; 
    while (!feof(_entrada)) { 
     fgets(auxiliar2, 100, _entrada); 
     token = strtok(auxiliar2, ":"); 
     token = strtok(NULL, ":"); 
     (_trabajo - > nombre) = strdup(strtok(token, "\n")); 

     fgets(auxiliar2, 100, _entrada); 
     token = strtok(auxiliar2, ":"); 
     token = strtok(NULL, ":"); 
     (_trabajo - > editorial) = strdup(strtok(token, "\n")); 

     fgets(auxiliar2, 100, _entrada); 
     token = strtok(auxiliar2, ":"); 
     (_trabajo - > valor) = atoi(strtok(NULL, ":")); 

     fgets(auxiliar2, 100, _entrada); 
     token = strtok(auxiliar2, ":"); 
     (_trabajo - > area) = atoi(strtok(NULL, ":")); 

     fgets(auxiliar2, 100, _entrada); 
     token = strtok(auxiliar2, ":"); 
     (_trabajo - > vendido) = atoi(strtok(NULL, ":")); 
    } 
} 




void menor(FILE * _entrada, FILE * _salida, Libro * _trabajo, int cantidad) { 
    int i; 
    int menor = 0; 
    int posicion = 0; 
    for (i = 0; i < cantidad; i++) { 
     if ((_trabajo - > area) == 1) { 
      menor = (_trabajo - > vendido); 
      _trabajo++; 
     } 
    } 
    _trabajo--; 
    fprintf(_salida, "%s", (_trabajo - > nombre)); 
} 
+0

Пожалуйста, объясните ошибку. Это ошибка времени выполнения или логическая ошибка. Также укажите назначение вашего кода. Это поможет нам советовать вам дальше. – SanVed

+0

логическая ошибка, потому что, когда я создаю ФАЙЛ в функции «менор», он пишет правильно, но в этом случае мне нужно создать ФАЙЛ в основном, потому что мне нужно писать в этом ФАЙЛЕ в другие функции, но ничего не пишите в ФАЙЛ –

ответ

1

В главном, изменения:

salida = fopen(final, "r"); 

Into:

salida = fopen(final, "w"); 

Это Trun cate файл. Если вы хотите добавить файл (это означает изменение содержимого существующего файла без его удаления), вам нужно «r +».

0

Ваше описание проблемы неясно. Пожалуйста, обновите свой вопрос, чтобы показать нам точное (скопированное и вставленное) сообщение об ошибке.

Но когда я скомпилировать программу, я получаю:

c.c:1:26: fatal error: stdio.h : No such file or directory 
    #include <stdio.h> 
         ^
compilation terminated. 

Удалите пробелы из #include директив. Изменить это:

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

к этому:

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

(интерпретация названия между < и > является компилятором специфична, но в этом случае компилятор, вероятно, ищет файл, имя которого буквально " stdio.h ", включая начальные и конечные пробелы.)

+0

Описание _not_ неопределенное, равно как и решение. Описание проблемы - первая строка сообщения. Это означает, что программа запускает [_not_ compile error], но выходной файл выглядит пустым. BTW, OP опубликовал весь файл. Ошибки, которые вы ухаживали, тривиальны для исправления, и SO не всегда идеально подходит для форматирования образцов кода. См. Мой ответ. Я сделал это только с проверкой кода/стола, основанной на первой строке сообщения. Ваш ответ _completely_ неправильный, и OP разъяснил реальную проблему времени выполнения в одном из своих комментариев перед вашим ответом. –

+0

@CraigEstey: Возможно, вы правы, но я все еще нахожу и вопрос, и комментарий неопределенным. Первый комментарий к вопросу спрашивает: «Это ошибка времени выполнения или логическая ошибка»; OP ответил, что это «логическая ошибка». Означает ли это, что проблема не возникла во время выполнения? Я не знаю. В любом случае OP должен показывать сообщение об ошибке, если оно есть, или выход программы, если таковой нет. Дополнительные пробелы в директиве '# include' могут указывать на то, что OP повторно набрал код, а не копировал и вставлял его. Если это так, ему нужно показать нам фактический код. –

+0

Вырезать OP slack (eng not 1st lang) и переписать первое предложение «файл выбран» в «файл, выбранный для вывода». Проб первый пост и не знал ctrl-k, поэтому он попытался опубликовать его как html, а затем отредактировал обратно - я тоже сделал это в первый раз. Обратите внимание также, что «->» вместо «->» - он сделал s /> />/g и т. Д. Код строит и работает с незначительными исправлениями опечаток. Это настоящий код.И программа предложит два файла, а затем запустится. Выходной файл будет пустым и сообщение об ошибке не появится. IMO, ctrl-k S/O Braindamaged. Он также нуждается в «вставке из загруженного файла» - возможно, это предотвратило опечатки –

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