它必须是一个不超过23大于23的非阴性INT。我有
int main(void){
int rows;
while (rows < 1 || rows > 23)
{
printf("Height:");
scanf("%d", &rows);
}
然后idk为对方做什么。
是无效的吗?orrrr什么大声笑我将如何实现
通过初始化 rows
避免不确定的行为(如果您不幸的话,它的不确定的初始垃圾值可能为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;
}