2017-01-17 7 views
-1

Ich versuche, eine Funktion zu schreiben, die Zahlen vom Benutzer erhalten, und legte sie in Datei und dann liest sie und finde die minimun. Dies ist der Code, den ich geschrieben habe, aber es funktioniert überhaupt nicht. Kann mir bitte jemand helfen zu verstehen, was ich falsch mache? Ich bin neu in Clesen und schreiben von und in Datei

#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

Haben Sie in der Datei suchen nach dem Ausführen des Programms? – user3386109

+1

Ihre Verwendung von 'while (! Feof())' ist [falsch] (http://stackoverflow.com/q/5431941/3185968) – EOF

+1

@EOF Sie haben den am besten geeigneten Benutzernamen in SO, um diesen Kommentar zu posten. – CPHPython

Antwort

0

fix wie diese

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; 
} 
Verwandte Themen