2016-07-14 12 views
0

名前と電話番号を取得する電話帳の機能を実行します。要求された名前については、電話番号を印刷する必要があります。私は入力の終わりを検出できないため、最後の出力行は無限に印刷されます。私は\n,' 'および" "を使用しましたが、何も動作しません。 HELP!入力文字列の末尾を検出できません

#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 */  

答えて

0

"\ nが" scanf機能の入力文字列の一部ではありません。
次のコードはブレークを入力しません(条件は常にFALSEです)。

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

あなたは空の文字列(ユーザーの入力し、Enterキーを押します)で入力を終了したい場合は、
次のように動作するはずです:

  1. getsscanfを交換(またはより良い安全なバージョンを使用します。gets_sを) 。
  2. 入力シーケンスの終了を検出するために、temp [0]をゼロと比較します。

サンプルコード:

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; 
} 
関連する問題