使用带有while循环的scanf输入两个单独的字符串

时间:2014-11-21 14:21:51

标签: c gcc scanf

我正在尝试创建一个读取名称和数字的程序,该程序用空格分隔并将输入分配给结构。

typedef struct {

    char name [20];
    char number [12];
} Entry;

scanf函数在while循环中,如果输入为"."

,我希望它从while循环中断
while(strcmp(e.name,".")!=0) {
    scanf("%s %s", e.name, e.number );
}

但是使用上面的代码意味着用户必须输入两个句点。我想知道是否有人建议如何在第一次"."之后让它从循环中断开。

2 个答案:

答案 0 :(得分:2)

我建议您将scanf()替换为fgets()。检查man page是否为syantax。

  1. 读取输入[yes,sinle line input,用空格分隔]
  2. 标记并验证输入
  3. 进行处理。
  4. 这样,将输入与.进行比较(在退出条件的情况下)将完成这项工作。

    不要忘记处理将被\n

    读取并存储到缓冲区中的尾随fgets()

答案 1 :(得分:2)

使用两个条件:

while(1) {  //infinite loop

    scanf("%19s", e.name);
    getchar(); //remove the \n from the stdin
    if(strcmp(e.name,".")==0)
        break;

    scanf("%11s", e.number);
    getchar(); //remove the \n from the stdin
    if(strcmp(e.number,".")==0)
        break;
}

19和11告诉scanf扫描最多这么多字符,然后在最后添加\0