2016-07-15 2 views
1

Ich habe eine Datei formatiert wie:fscanf in einer auf den gleichen Array Spar Schleife verursacht Räume Array zu füllen

01,Name1 
02,Name2 
03,Name3 
04,Name4 
05,Name5 

Ich binde sie machen es so, dass ein Benutzer eine Zahl wie 01 eingeben kann, oder 02 und der entsprechende Name wird zurückgegeben. Das funktioniert gut, wenn ich 01. Allerdings geben, wenn ich eine Nummer eingeben, nachdem es nicht funktioniert, und es scheint, wie wenn ich die Schleife mit ersetzen:

fscanf(fp,"%20[^,],%s[^\n]",ln,name); 
printf("1=%c 2=%c 3=%c 4=%c\n",ln[0],ln[1],search[0],search[1]); 
fscanf(fp,"%20[^,],%s[^\n]",ln,name); 
printf("1=%c 2=%c 3=%c 4=%c\n",ln[0],ln[1],search[0],search[1]); 

Das 2. Mal den ln [0] mit gefüllt wird viele Leerzeichen oder ein "\ n". Ich kann es nicht sagen. Jede Hilfe wird geschätzt.

Hier ist mein Code:

#include <stdio.h> 

int main() 
{ 

    puts("Enter seach number:"); 
    char search[2]; 
    scanf("%c%c",&search[0],&search[1]); 

    FILE *fp; 
    fp = fopen("/Users/user1/Desktop/text.txt","r"); 
    if(fp == NULL){ 
     puts("File dose not exits"); 
     return (1); 
    } 
    else{ 
     puts("File found"); 
    } 
    char ln[3]; 
    char name[20]; 

    fopen("fp","r"); 
    puts("File opened"); 

    int searching = 1; 

    while(searching == 1) 
    { 
     fscanf(fp,"%20[^,],%s[^\n]",ln,name); 

     if(ln[0]==search[0]&&ln[1]==search[1]) 
     { 
      printf("%s",name); 
      searching = 0; 
     } 
     else if(ln[0] == '\n') 
     { 
      puts("Could not find number"); 
      searching = 0; 
     } 
    } 
    return 0; 
} 
+1

Überprüfen Sie immer den Rückgabewert der * scanf-Funktionen. Überprüfen Sie die Dokumente, um zu sehen, was es bedeutet. – hyde

+1

Was ist 'fopen (" fp "," r ");' für? – MikeCAT

Antwort

0

Falsche Verwendung von fscanf() Format

// fscanf(fp,"%20[^,],%s[^\n]",ln,name); 
fscanf(fp,"%20[^,],%s%*[^\n]",ln,name); 
// or 
fscanf(fp,"%20[^,],%s ",ln,name); 
// or 
fscanf(fp," %20[^,],%s",ln,name); 

bessere Ergebnisse zu überprüfen und füge Breite %s

char ln[20+1]; 
char name[30+1]; 
if (2 == fscanf(fp,"%20[^,],%30s%*[^\n]",ln,name)) Success(); 

Beste fgets() zu verwenden,

char buf[100]; 
if (fgets(buf, sizeof buf, fp) == NULL) { 
    if (2 == sscanf(buf,"%20[^,],%s",ln,name)) Success(); 
} 
+0

danke, der 2. und 3. funktioniert! –

Verwandte Themen