2016-06-08 12 views
0

Dies war eine Prüfungsfrage vor ein paar Jahren, und ich habe Mühe, es zu lösen.Finden Sie die Nummer mit den maximalen Ziffern darin

Ich muss ein Programm erstellen, das aus einer Textdatei eine Reihe von Zahlen mit einem Leerzeichen dazwischen liest, die entweder Ganzzahlen oder Gleitkommazahlen sein können. Dann druckt es die Nummer mit der maximalen Anzahl von Ziffern darin unter Verwendung einer rekursiven Funktion.

Ich weiß nicht, wie man die Zahlen aus der Datei liest. Wenn ich sie alle wie Floats lese, enden sie mit der gleichen Anzahl an Ziffern. Hier ist mein Code, bis ich weiß, aber ich weiß nicht weiter. Zum Beispiel:

In der Textdatei haben wir die Zahlen:1 2 1,5 1,456 2 2,78 7

Die Zahl mit der maximalen Anzahl von Ziffern1,456mitist 4Ziffern drin.

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


int main() 
{ 
    int n,i,nr=0; 
    float v[100]; 
    FILE *fp; 
    fp = fopen("text.txt","r"); 
    while(fscanf(fp,"%f",&v[nr])==1){ 
     nr++; 
    } 
    fclose(fp); 



    return 0; 
} 
+0

Sie überprüfen sollten, fp 'if (fp == NULL) {/ * error * /}' – Michi

+0

@Michi ich das immer tun, aber es ist jetzt nicht mein Problem –

+3

Können Sie ein besseres Beispiel geben? Beispiel Eingabe und Ausgabe? – Tyler

Antwort

2

Wenn Sie die Eingabe als eine einfache Zeichenfolge behandeln, sollten Sie in der Lage sein, nur strlen(), nicht wahr?

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
int main() { 
    size_t maxdigits = 0, i; 
    char buf[128], winner[128]; 
    char winner[128]; 
    FILE* fp = fopen("text.txt", "r"); 
    if (fp == NULL) { 
     printf("missing text.txt\n"); 
     return -1; 
     } 
    memset(winner, 0, sizeof(winner)); 
    while(fscanf(fp, "%s", buf) == 1) { 
     i = strlen(buf); 
     if (strchr(buf, '.') != NULL) 
      i--; 
     if (i > maxdigits) { 
      maxdigits = i; 
      strcpy(winner, buf); 
      } 
     } 
    fclose(fp); 
    printf("winner '%s' has %d digits\n", winner, maxdigits); 
    return 0; 
    } 
+1

Es sollte Dezimalstellen ignorieren. – Kupiakos

+0

Roger - bearbeitet. – user590028

+0

'int i' sollte' size_t i' sein wegen des Rückgabetyps von 'strlen', aber selbst wenn Sie es beheben, haben Sie immer noch ein Vergleichsproblem mit maxdigits, das ein int – Michi