2016-07-14 56 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功能的输入字符串的一部分。
以下代码不会输入中断(条件始终为FALSE)。

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

如果您希望通过空字符串(当用户按Enter键)来终止输入,
下面应该工作:

  1. 更换scanfgets(或更好的使用安全的版本: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; 
}