我需要创建一个读取字符串“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次..
答案 0 :(得分:2)
不要(永远)使用gets()
。这不好。
请改用fgets()
,注意它存储换行符。使用一些更高级别的函数(如sscanf()
)来解析输入。同样,使用另一个fgets()
+ sscanf()
组合来进行值读取。
答案 1 :(得分:0)
你做错了,因为你从不检查错误(包括文件结尾)。这就是你读两次的原因。
相反,例如。
while ((fgets(L, sizeof(L), stdin) != NULL)
{
/* ... */
}
答案 2 :(得分:0)
您的scanf不会消耗行终止符,只会消耗它之前输入的内容。所以gets()然后看到行终止符,并返回一个空字符串。