2016-07-14 10 views
0

Dies ist die Funktion eines Telefonbuchs, das Namen und ihre Telefonnummer erhält. Für die angeforderten Namen muss die Telefonnummer gedruckt werden. Die letzte Zeile druckt unendlich, ich kann das Ende der Eingabe nicht erkennen. Ich habe \n, ' ' und " " verwendet, aber nichts funktioniert. HILFE!Das Ende der Eingabezeichenfolgen kann nicht erkannt werden.

#include <stdio.h> 

struct ph_book{ 
     char name[100000]; 
     double ph; 
      }p[20]; 
int main() { 
     char temp[100000],ex[100000]; 
     int n,i,flag=0; 
     scanf("%d",&n); 
     for(i=0;i<n;i++){ 
     scanf("%s",p[i].name) ; 
     scanf("%lf",&p[i].ph); 
    } 
scanf("%s",temp); 
while(temp[0]!='\n'){ 
    flag=0; 
    for(i=0;i<n;i++){ 
     if(strcmp(temp,p[i].name)==0){ 
      printf("%s=%.lf\n",p[i].name,p[i].ph); 
      flag=1; 
      break; 
     } 
    } 
    if (flag==0){ 
     printf("Not found\n"); 
    } 
    strcpy(ex,temp); 
    scanf("%s",temp); 
    if (strcmp (temp, "\n") == 0) 
     break; 

} 
    return 0; 
}/* Enter your code here. Read input from STDIN. Print output to STDOUT */  

Antwort

0

Die "\ n" ist nicht Teil der Eingangskette von scanf Funktion.
Der folgende Code wird nicht in die Pause eingefügt (Bedingungen sind immer FALSE).

if (strcmp (temp, "\n") == 0) 
    break; 

Wenn Sie Eingabe durch leere Zeichenkette beenden wollen (wenn der Benutzer drücken Sie die Eingabetaste),
Die folgenden sollte funktionieren:

  1. ersetzen scanf mit gets (oder besser verwenden, um die sichere Version: gets_s) .
  2. Vergleichen Sie temp [0] mit Null, um das Ende der Eingabefolge zu erkennen.

Beispielcode:

gets_s(temp, sizeof(temp)); //Instead of scanf("%s",temp); 

while (temp[0] != 0) 
{ 
    strcpy(ex, temp); 
    gets_s(temp, sizeof(temp)); //Instead of scanf("%s",temp); 
    if (temp[0] == 0) 
     break; 
}