无法检测输入字符串的结尾

时间:2016-07-14 13:50:03

标签: arrays string input structure

这是为了执行电话簿获取姓名和电话号码的功能。对于要求的姓名,必须打印他们的电话号码。最后一行无限打印,因为我无法检测到输入的结束。我使用了\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 */    

1 个答案:

答案 0 :(得分:0)

&#34; \ n&#34;不是scanf函数的输入字符串的一部分 以下代码不会进入中断(条件始终为FALSE)。

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

如果您希望通过空字符串终止输入(当用户按下回车键时),
以下应该有效:

  1. scanf替换为gets(或者更好地使用安全版本:gets_s)。
  2. 将temp [0]与零进行比较,以检测输入序列的结束。
  3. 示例代码:

    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;
    }