2016-07-14 1 views
0

이름과 전화 번호를 가져 오는 전화 번호부의 기능을 수행합니다. 요청 된 이름의 경우 전화 번호를 인쇄해야합니다. 마지막 입력란은 입력 끝을 감지 할 수 없어 무한히 인쇄됩니다. \n, ' '" "을 사용했지만 아무 것도 작동하지 않습니다. 도움 받기!입력 문자열의 끝을 감지 할 수 없습니다.

#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 함수의 입력 문자열의 일부가 아니다.
다음 코드는 중단을 입력하지 않습니다 (조건은 항상 거짓입니다). 당신이 (사용자 키를 눌러 입력 할 때) 빈 문자열로
을 입력을 종료하려면

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

다음 작업을해야합니다 :

  1. gets으로 scanf 교체 (또는 더 안전한 버전을 사용 : gets_s를) .
  2. 입력 시퀀스의 끝을 감지하기 위해 temp [0]을 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; 
}