C语言,输入一个2-10之间的整数,如果输入不满足条件则重新输入。

2024-12-17 08:38:04
推荐回答(2个)
回答1:

这是个很多新手都不清楚的细节!

一定记住,scanf遇到第一个不符合的字符,就会把它放回输入流去!下次还会读到这个字符!

那么下次scanf再读的时候还会遇到它!还会给judge返回0,放回去!死循环!

1. 简单的解决方法是在printf后面,循环里写 if(judge==0)getchar();来拿掉那个不符合要求的字符。

2. 法一的问题是,如果你还可能同时输入多个非数字字符,这样会输出好几遍"Please input a number of one of your cards.\n",解决方法是写个循环:

char c;if(judge==0)while((c=getchar())!='\n');

或者用getline,拿一行丢掉,是一样的。

3. 或者直接改scanf,涉及scanf高级特性:

while(1)

{

judge = scanf("%d", &card);

if(judge==0)judge=scanf("%*[^0-9]%d",&card);//加一行

if(judge == 1 && card > 1 && card < 11)

break;

printf("Please input a number of one of your cards.\n");

}

这样可以获得,如果你输入“abc3”,能把这个3输入进去。如果是“abc15”,15超范围了,一样会让你重新输入。

看你的需求了。

关于这些,我刚写了个文章:网页链接讲的更细致,可以看看。

当然这个也有EOF的情况,读到输入末尾,windows里就是按Ctrl-Z+enter,有时候要按两次Ctrl-Z+enter,模拟文件读到尽头的情况,那还要继续判断!if(judge==EOF) break;不过这个可能也超出考虑范围了。

scanf里有非常多这种很危险的小细节!最好看看!或者干脆只用getline拿进来,用sscanf读东西!

回答2:

using System;
class Program
{
static void Main(string[] args)
{
Console.WriteLine("请输入一个数字:");
int a = int.Parse(Console.ReadLine());
for (; ; )
{
if (a % 2 == 0)
a = a / 2;
else
a = a * 3 + 1;
if(a==1)
break;

}
Console.WriteLine(a);
Console.ReadKey();
}
}