C 读取结构矩阵会跳过每个结构的最后一个成员变量

C 读取结构矩阵会跳过每个结构的最后一个成员变量,c,matrix,struct,C,Matrix,Struct,我目前正在学习如何在C中使用结构,在从输入读取结构矩阵时遇到以下问题:我有一个包含4个成员变量的结构,我想从输入读取它,并将值放在二维结构中数组。为每个结构的第三个成员变量输入值后,它将跳过第四个变量,并提示我为以下结构的第一个变量输入值 以下是结构的定义方式: struct zone{ char tc[20],or[20]; char dir; int nrc; }; 以下是我编写的代码,用于从输入读取结构: int n, m, i, j; struct zone

我目前正在学习如何在C中使用结构,在从输入读取结构矩阵时遇到以下问题:我有一个包含4个成员变量的结构,我想从输入读取它,并将值放在二维结构中数组。为每个结构的第三个成员变量输入值后,它将跳过第四个变量,并提示我为以下结构的第一个变量输入值

以下是结构的定义方式:

struct zone{
    char tc[20],or[20]; 
    char dir;
    int nrc; 
};
以下是我编写的代码,用于从输入读取结构:

int n, m, i, j;
struct zone **a;

scanf("%d%d", &n, &m);

for (i = 0; i < n; i++) {
        for (j = 0; j < m; j++) {
            scanf("%s", &a[i][j].or);
            scanf("%s", &a[i][j].tc);
            scanf("%d", &a[i][j].nrc);
            scanf("%c", &a[i][j].dir);
        }
    }
intn,m,i,j;
结构区**a;
scanf(“%d%d”,&n,&m);
对于(i=0;i
因此,在这个特定示例中,我无法在每个结构中为变量dir输入值(它会提示我为下一个变量输入值)。

语句
scanf(“%d”、&a[I][j].nrc)
不会从
enter
键读取换行符

当你输入10时,你输入一个
1
,一个
0
,然后输入
ENTER
键。现在输入缓冲区中有三个字符
scanf(“%d”)
读取
1
0
,将它们解释为数字
10
,但换行符仍在输入缓冲区中。
scanf(“%d”)
将立即读取此换行符,然后程序将转到下一个scanf,并等待您输入字符串


编辑:解决方案可以是使用
scanf(“%c”,&a[i][j].dir)
%c
格式说明符之前添加空格

您的最后一次扫描正在使用换行符。顺便说一句,不要传递字符串的地址,只传递字符串。这并不能解决最后一次扫描的问题。@2501已编辑,需要删除最后一次扫描的换行符。