如何不断要求用户输入,直到C中的条件得到满足



这是一个小型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;
}

相关内容

  • 没有找到相关文章

最新更新