它必须是一个非负的int不大于23 ....没有空白条目或其他条目,如果是这样它再次重新提供用户 我有
int main(void){
int rows;
while (rows < 1 || rows > 23)
{
printf("Height:");
scanf("%d", &rows);
}
然后idk为另一个做什么。
是NULL吗? orrrr是什么哈哈 我将如何实现
答案 0 :(得分:1)
通过初始化rows
来避免undefined behavior(如果您运气不好,其未定义的初始垃圾值可能为18)....
使用getline(3)或fgets(3)读取整行。
然后使用sscanf(3)解析该行(考虑sscanf
的结果,并可能使用%n
)或使用strtol(3)(例如long n=strtol(p,0,&end);
后声明char *end=NULL;
)
或至少使用scanf
之类的结果
int rows = 0;
while(1) {
puts("number of rows?");
fflush(stdout);
int nbscan = scanf("%d", &rows);
if (nbscan<=0) continue;
if (rows < 1 || rows>20) continue;
if (feof(stdin)) break;
}