这是一个小型C程序,我正在尝试验证用户输入。我希望用户输入3个值。条件是所有3个输入不应具有相同的值。那么,如何循环用户输入,直到条件得到满足(True(。这是代码。帮帮我,我是编程新手,谢谢。:(
#include<stdio.h>
int main()
{
int u1,u2,u3;
printf("Enter 3 Numbers : "); //Printing
scanf("%d %d %d",&u1,&u2,&u3); //Asking for Input
if(u1==u2 || u2==u3 || u3==u1) //This is the condition
{
printf("Condition is not Satisfied !");
}
}
那么我该怎么循环呢。谢谢。
我建议您使用以下代码:
#include <stdio.h>
int main( void )
{
int u1,u2,u3;
for (;;) //infinite loop, equivalent to while(true)
{
printf( "Enter 3 Numbers: " );
scanf( "%d %d %d", &u1, &u2, &u3 );
if ( u1!=u2 && u2!=u3 && u3!=u1 )
break;
printf( "Error: Condition is not satisfied!n" );
}
}
与其他答案相比,该解决方案的优点是,每次循环迭代只检查一次条件。
然而,上面的代码(以及大多数其他答案的代码(有一个严重的问题:如果用户输入的是字母而不是数字,程序将陷入无限循环。这是因为在不检查返回值的情况下调用scanf
是不安全的。有关不安全原因的更多信息,请参阅下页:scanf((的初学者指南
因此,最好检查scanf
的返回值,并消耗该行剩余部分的所有字符。消耗所有剩余字符很重要,因为否则,如果用户输入6abc
,那么scanf
将消耗6
,但将abc
留在输入流上,这样下次调用scanf
时(将在下一次循环迭代中(,它将尝试匹配abc
,并立即失败,而无需等待进一步的输入。这将导致一个无限循环。
#include <stdio.h>
#include <stdlib.h>
int main( void )
{
int u1,u2,u3;
int ret;
for (;;) //infinite loop, equivalent to while(true)
{
printf( "Enter 3 Numbers: " );
if ( ( ret = scanf( "%d %d %d", &u1, &u2, &u3 ) ) != 3 )
{
int c;
//check for unrecoverable error
if ( ret == EOF )
{
fprintf( stderr, "Unrecoverable input error!n" );
exit( EXIT_FAILURE );
}
//print error message for recoverable error
printf( "Unable to convert input!n" );
//consume all leftover characters on the line
do
{
c = getchar();
} while ( c != EOF && c != 'n' );
}
if ( u1!=u2 && u2!=u3 && u3!=u1 )
break;
printf( "Error: Condition is not satisfied!n" );
}
}
试试这个,
#include<stdio.h>
int main()
{
int u1,u2,u3;
while(u1==u2 || u2==u3 || u3==u1) //This is the condition
{
printf("Enter 3 Numbers : "); //Printing
scanf("%d %d %d",&u1,&u2,&u3); //Asking for Input
if(u1==u2 || u2==u3 || u3==u1)
printf("Condition is not Satisfied !n");
else
break;
}
return 0;
}