【发布时间】:2017-08-06 05:39:16
【问题描述】:
这是我的代码:
#include <stdio.h>
#include <stdlib.h>
enum abcd{aaaa,bbbb,cccc,dddd,z};
typedef struct stct{
abcd eAbcd;
int x;
} stct;
typedef struct indexx{
int size;
struct stct *addr;
} indexx;
void add_item(indexx *idx);
stct read_in();
int main()
{
indexx idx = {0, NULL};
int op;
while (1)
{
printf("\n1. add item\n4. quit\n");
scanf("%d\n", &op);
switch (op)
{
case 1:
add_item(&idx);
break;
case 4:
return 0;
default:
printf("Please enter a correct number\n");
}
}
}
void add_item(indexx *idx)
{
stct *newdata;
newdata = (stct *) realloc(idx->addr, idx->size*sizeof(stct));
if (newdata)
{
idx->size ++;
idx->addr = newdata;
idx->addr[idx->size-1] = read_in();
}
else
printf("No memory\n");
}
stct read_in()
{
stct temp;
int ab;
temp.eAbcd = z;
while (temp.eAbcd != aaaa && temp.eAbcd != bbbb && temp.eAbcd != cccc && temp.eAbcd != dddd)
{
printf("select(1-4):\n");
scanf("%d", &ab);
ab-=1;
switch (ab)
{
case 0: temp.eAbcd = aaaa; break;
case 1: temp.eAbcd = bbbb; break;
case 2: temp.eAbcd = cccc; break;
case 3: temp.eAbcd = dddd; break;
}
}
scanf("%d", &temp.x);
return temp;
}
它应该在scanf()之前打印出select(1-4):,但是当我编译并运行程序时,我得到了这个:
1
select(1-4):
(1是我输入的。)
我已经尝试了C/C++ printf() before scanf() issue 中的解决方案,但它们都不适合我。
【问题讨论】:
-
所以你添加了例如
fflush()就像那里的建议? -
你在哪里运行这个?
-
@Sridharan 在 fedora 26 上运行,使用 g++ 7.1.1 编译
-
@FelixPalmen 是的,我已经尝试了该问题答案中的所有解决方案
-
好吧,无法复制(我很确定没有其他人可以)。也许您没有显示全部您的代码。通过添加
#include <stdio.h>和main函数将其转换为 minimal reproducible example 可以按预期工作。