循环中的最后一个fgets永远不会执行

时间:2015-04-21 01:03:56

标签: c

我正在尝试使用fgets填充2个数组。由于某种原因,最后一个循环迭代的最后一个fget永远不会执行。

例如,如果num_inputs = 5,则只读取9行(而不是10行)。

int num_imputs;

//read the number of inputs

scanf("%d", &num_imputs);

char secret_arr[num_imputs][8];//stores all the secrets
char encoded_message_arr[num_imputs][256];//stores all the encoded messages

for(int i = 0; i < num_imputs ; i++){

    fgets (secret_arr[i],8, stdin);
    fgets (encoded_message_arr[i],256, stdin);

}

如果我硬编码num_inputs而不是使用scanf()读取它,这段代码可以很好地找到。有人可以解释为什么会这样吗?

1 个答案:

答案 0 :(得分:3)

您在scanf中缺少换行符(假设您的输入对num_inputs数据条目有一个ENTER)。第一个fgets实际存储空字符串的结果,当它看到作为num_inputs数据条目一部分的换行符时停止。

应该是:

scanf("%d\n", &num_imputs);