编程“双读”一个字符串

时间:2013-09-11 12:28:20

标签: c string

我需要创建一个读取字符串“A = B”并在变量数组中搜索B的程序。如果它没有找到B,那么它会询问它的值并将其放在另一个数组中。 好吧,我不知道这个想法是否清楚,但这是一个例子:

  while(1){
  printf("Get string\n");
  gets(L);


  if(L[0]=='\0') break;

  if(L[2] == '1') {
          printf("Value of 1: ");
          scanf(" %lf", &m);

          }

          }
  printf("\nbreak");

我需要在输入enter时停止此程序,所以我使用if(L [0] =='\ 0')中断;为了它。

我的问题是:每次我问B的值,我的程序读了一个“幽灵字符串”L,它是,它不让我把L的值和程序停止。它几乎是读取字符串的两倍,但由于条件L [0]!='\ 0'而中断。我究竟做错了什么? 如果我们删除这个条件,那么程序打印2次“Get string”,而不要求我输入字符串2次..

3 个答案:

答案 0 :(得分:2)

不要(永远)使用gets()。这不好。

请改用fgets(),注意它存储换行符。使用一些更高级别的函数(如sscanf())来解析输入。同样,使用另一个fgets() + sscanf()组合来进行值读取。

答案 1 :(得分:0)

你做错了,因为你从不检查错误(包括文件结尾)。这就是你读两次的原因。

相反,例如。

while ((fgets(L, sizeof(L), stdin) != NULL)
{
    /* ... */
}

答案 2 :(得分:0)

您的scanf不会消耗行终止符,只会消耗它之前输入的内容。所以gets()然后看到行终止符,并返回一个空字符串。