【发布时间】:2019-04-21 14:35:22
【问题描述】:
当我从stdin 获取一个对于c 来说太大的值时,重置的行为不符合预期。系统会再次提示用户输入代码,但在输入后需要输入的位置会出现一个额外的新行,而不是长度检查失败。
void clear(void) {
while (getchar() != '\n')
;
}
int add_flight(code_t codes[], int lf) {
char c[MAX_CODE_LEN + 1];
int s = 0;
while (s == 0) {
printf("Enter code>\n");
if (fgets(c, sizeof c, stdin)) {
printf("%s", c);
if ('\n' == c[0]) {
printf("Invalid input\n");
} else if (c[sizeof c - 1] == '\0' && c[sizeof c - 2] != '\n') {
clear();
printf("Invalid input\n");
memset(c, 0, sizeof c);
} else {
strcpy(codes[lf].id, c);
s = 1;
break;
}
}
}
return 0;
}
任何帮助将不胜感激。
【问题讨论】:
-
发布
code_t的定义。特别是.id成员的内存是怎么确定的?