我已经创建了一个可变大小的数组(VLA),我想在fgets
循环中使用for
函数填充它。但是程序传递了一些函数,它奇怪地忽略了第一个fgets
动作。
我的代码是;
void editorMain(void)
{
printf("Please enter the number of items: ");
scanf("%u", &itemQuantity);
printf("\n\n");
char itemNames[itemQuantity][ITEM_NAME_LEN+1];
memset(&itemNames, 0, sizeof(itemNames));
printf("Please enter the names of items: \n");
char line[ITEM_NAME_LEN+1];
memset(&line, 0, sizeof(line));
for (int i = 0; i < itemQuantity; ++i) {
printf("#%d: ", i + 1);
memset(&line, 0, sizeof(line));
fgets(line, ITEM_NAME_LEN+1, stdin);
for (int a = ITEM_NAME_LEN+1; a >= 0; --a) {
if (line[a] == '\n') {
line[a] = 0;
}
else;
}
snprintf(itemNames[i], ITEM_NAME_LEN+1, "%s", line);
}
...
}
它输出;
Please make a choice: 2
Please enter the number of items: 4
Please enter the names of items:
#1: #2: Marlboro
#3: Parliament
#4: Winston
Please enter the prices of items:
#1: 25
#2: 950
#3: 1000
#4: 800
................... AVAILABLE ITEMS oo
# Item Name Price
= ========= =======
1. 0.25 TL
2. Marlboro 9.50 TL
3. Parliament 10.00 TL
4. Winston 8.00 TL
Enter your item selection:
你的建议是什么?
答案 0 :(得分:1)
scanf("%u"
调用会读取换行符,但会将该字符留在输入流中。当你打电话给你的第一个fgets
时,它只是读取换行符并给你一个空字符串。
有许多方法可以清除输入流,在这种情况下,您只需在fgets
之后向scanf
添加虚拟来电。