我正在尝试使用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()读取它,这段代码可以很好地找到。有人可以解释为什么会这样吗?
答案 0 :(得分:3)
您在scanf
中缺少换行符(假设您的输入对num_inputs
数据条目有一个ENTER)。第一个fgets实际存储空字符串的结果,当它看到作为num_inputs
数据条目一部分的换行符时停止。
应该是:
scanf("%d\n", &num_imputs);