2017-01-17 14 views
-1

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

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

int min_call(int, ...); 


int main() 
{ 
    int min; 
    min = min_call(90,78,5,20,-1); 
    printf("\n the minimum number is: %d ", min); 

    min = min_call(70,40,2,-1); 
    printf("\n the minimum number is: %d ", min); 

    min = min_call(40,30,-1); 
    printf("\n the minimum number is: %d ", min); 

    return 0; 
} 


int min_call(int first, ...) 
{ 
    int min; 
    int currentNum; 
    int i; 
    va_list args; 
    va_start(args,first); 

    FILE *fd; 

    if(!(fd=fopen("min_call_file.txt","a"))) 
    { 
     fprintf(stderr, "cannot open file \n"); 
     exit (0); 
    } 

    for(i = first; i>=0; i=va_arg(args, int)) 
    { 
     fprintf(fd, "%d", i); 
    } 
    va_end(args); 

    fseek(fd,0,SEEK_SET); 
    min = fgetc(fd); 
    do 
    { 
     currentNum = fgetc(fd); 
     if(currentNum < min) 
      min = currentNum; 


    }while(!feof(fd)); 

    fclose(fd); 
    return min; 
} 
+0

ли вы посмотрите на файл после запуска программы? – user3386109

+1

Ваше использование 'while (! Feof())' is [wrong] (http://stackoverflow.com/q/5431941/3185968) – EOF

+1

@EOF у вас есть самое подходящее имя пользователя в SO, чтобы опубликовать этот комментарий. – CPHPython

ответ

0

исправить как этот

int min_call(int first, ...){ 
    int min; 
    int currentNum; 
    int i; 
    va_list args; 
    va_start(args,first); 

    FILE *fd; 

    if(!(fd=fopen("min_call_file.txt","w+"))){//w : new write each call, a : Straddle the call, + : To read later 
     fprintf(stderr, "cannot open file \n"); 
     exit (0); 
    } 

    for(i = first; i>=0; i=va_arg(args, int)){ 
     fprintf(fd, "%d ", i);//put space after %d because Delimiter is required 
    } 
    va_end(args); 

    fflush(fd);//Flush the buffer and to establish the write 
    fseek(fd, 0, SEEK_SET); 
    fscanf(fd, "%d", &min);//read integer, not character 
    do { 
     if(1==fscanf(fd, "%d", &currentNum) && currentNum < min){ 
      min = currentNum; 
     } 
    }while(!feof(fd)); 

    fclose(fd); 
    return min; 
}