2016-11-28 1 views
-1

ich in Text aus einer Eingabedatei lese. Ich habe Text getrennt von Noten, dhSplit eine Datei von Text in Trennzeichen und ein separaten Zahlen und Text in c

John Doe 100 95 67 85 
jane doe 67 78 99 

und im Durchschnitt dann die Zahlen. Ich kann mit strtok durch die Leerzeichen trennen, aber wie kann ich sagen, wenn ich eine ganze Zahl habe? Ich muss das Lesen von Namen und Ganzzahlen in 2 Funktionen aufteilen. Mein Code, um es zu lesen funktioniert, aber ich muss am Ende jedes Namens aufhören. Ich habe versucht, Zahlen zu verwenden, die in Strings umgewandelt wurden und strcmp verwenden, aber es hat nicht funktioniert.

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
void read_reverse_write(FILE * ptr_file, FILE * op); 
void write_and_avarage(int * fp, char * op); 
//int checker(char *token); 

int main(int argc, char** argv) { 

    FILE *fp; 
    FILE *op; 
    //opens quiz and checks and checks to make sure it did 
    fp = fopen("quiz.txt", "r"); 
    if (fp == NULL) { 
     printf("Error opening file"); 
     return (-1); 
    } 
    //opens op and checks that it did 
    op = fopen("output.txt", "w"); 
    if (op == NULL) { 
     printf("Error opening file"); 
     return (-1); 
    } 
    // runs read reverse write 
    read_reverse_write(fp, op); 
    fclose(fp); 
    fclose(op); 
    return (EXIT_SUCCESS); 
} 

void read_reverse_write(FILE * ptr_file, FILE * op) { 
    char buf[1000]; 
    char *token; 
    const char delim[2] = " "; 
    fgets(buf, 1000, ptr_file); 
    token = strtok(buf, delim); 

    while (token != 100) { 
      fprintf(op, "%s ", token); 
      token = strtok(NULL, delim); 


    } 


} 

/*void write_and_avarage(int * fp, char * op) { 

} 

int checker(char *token) { 
    char *arr[102]; 
    char ph[4]; 
    for (int p = 0; p < 100; p++) { 
     if (p < 10) { 
      snprintf(ph, 1, "%d", p); 
      arr[p] = ph; 
     } else if (p < 99) { 
      snprintf(ph, 2, "%d", p); 
      arr[p] = ph; 
     } else if (p = 100) { 
      snprintf(ph, 3, "%d", p); 
      arr[p] = ph; 
     } 
    } 
    for (int z = 0; z < 100; z++) { 
     if (strcmp(token, arr[z]) == 1) { 
      return 1; 
     } else { 
      z++; 
     } 
     return 0; 
    } 
} 

*/ 
+0

Überprüfen Sie die C-Standardbibliothek für die Umwandlung von Zeichen in int. Hinweis * atoi * – t0mm13b

+0

versuchte, dass mein Compiler es nicht als eine gültige Funktion reconcize – John

+0

Wenn Sie das erste Zeichen jedes Token (wenn nicht 'NULL') von' strtok' erzeugt sehen, können Sie sagen, ob es 'isalpha()' ist oder 'isdigit()' im ersten Fall den Namen erstellen, im zweiten Fall eine weitere Punktzahl. –

Antwort

0

Sie können den folgenden Code verwenden, um zu überprüfen, ob die Zeichenfolge eine Zahl ist oder nicht

#include <stdio.h> 
#include <string.h> 
#define MAX_NUM 9 
#define MIN_NUM 0 
#define ZERO 0 
#define MAX_SIZE 1024 

int checkDigit(int num, int len) 
{ 
    int divisor = 1, checkVal = 0; 
    if(len <= 2) 
     divisor = 10; 
    else if(len > 2) 
    { 
     len = len - 1; 
     while(len != ZERO) 
     { 
      divisor = divisor * 10; 
      len = len - 1; 
     } 
    } 
    checkVal = num/divisor; 
    if(checkVal > MIN_NUM && checkVal <= MAX_NUM) 
     return 1; 
    else 
     return 0; 
} 


void main() 
{ 
    char array[MAX_SIZE] = "JOHN DOE 120 DOE HELLO 2323 90909"; 
    char *split_token = NULL; 
    int status = 2, len = 0, sum = 0, total_digits = 0; 
    float average = 0; 
    split_token = strtok(array, " "); 
    while(split_token != NULL) 
    { 
     len = strlen(split_token); 
     status = checkDigit(atoi(split_token), len); 
     if (1 == status) 
     { 
      sum = sum + atoi(split_token); 
      total_digits = total_digits + 1; 
     } 
     split_token = strtok(NULL, " "); 
    } 
    average = (float)sum/total_digits; 
    printf("Average is : %f\n", average); 
} 

Dieser Code wird prüfen, ob die Zeichenfolge eine Zahl ist oder nicht, und schließlich den Mittelwert aller Zahlen in der angegebenen Zeichenfolge berechnen. Wenn Sie mehrere Sätze von Eingaben aus einer Datei lesen müssen, verwenden Sie fscanf() und verwenden Sie für jede Eingabezeile die vollständige Codelogik. Hoffe es hilft! Fragen Sie, ob Sie den vollständigen Code oder eine Klarstellung für den Code benötigen.