for 循环中的 Scanf 问题

Problems with Scanf in a for loop

提问人:Anil 提问时间:11/9/2021 最后编辑:halferAnil 更新时间:11/9/2021 访问量:45

问:

#define REGISTER (char *[5]) {"REGISTER NEW USER ACCOUNT", "Name:","User ID:", "Password:","Email ID:"}

typedef struct{
    int id;
    char *name;
    char *userID;
    char *pwd;
    char *emailID;
} password;


password pw={0,"","","",""};

int step=1;
int padding=15;
int y1=7
int x1=0;
int x2=167

int row_1 = sizeof(REGISTER) / sizeof(REGISTER[0]);

for (int i=1; i<=row_1; i++){    // i is corretly initiaised to 1

      j=(((x2-x1)-strlen(*(REGISTER+i)))/2)+strlen(*(REGISTER+i));
      step += increment;
      gotoxy(((x1-padding)+j), (y1+step));

      if (i==1){
         fflush(stdin);
         scanf("%30[^\n]s",pw.name);
      }
      else if (i==2){
         fflush(stdin);
         scanf("%12s",pw.userID);
      }
      else if (i==3){
         fflush(stdin);
         scanf("%15s",pw.pwd);
      }
      else {
         fflush(stdin);
         scanf("%30s",pw.emailID);
      }
}

我的scanf无法正常工作。对于 i 的每次迭代,它首先使用 gotoxy,然后 scanf 应该根据 i 获取正确字段的值。

我无法让它正常工作。如果未输入任何值,则光标将正确移动。

但是,如果输入值,它将不可预测地以错误终止,或者将光标移动到某个位置并等待输入。

我只需要在 pw.name 字段中包含空格。

注意:将 Code::blocks 与 gcc 一起使用。

C for 循环 GCC SCANF 代码块

评论

2赞 Eugene Sh. 11/9/2021
首先摆脱所有 ,其行为是未定义的。fflush(stdin)
2赞 Barmar 11/9/2021
为什么你有在末尾?这是非此即彼,而不是两者兼而有之。s%30[^\n]s%30s%30[^\n]
0赞 Gabriel Pellegrino 11/9/2021
我有点惊讶,你的变量 j 在哪里定义?
0赞 Barmar 11/9/2021
i<=row_1应该是 。否则,您将在阵列外部进行访问。i<row_1
1赞 Anil 11/9/2021
@eugene-sh 删除 fflush(stdin) 使事情变得更糟。它跳到第二个字段。

答: 暂无答案