不间断交替while循环 int number=0; while(scanf(“%d”、&number)){ 如果(sayi==1 | | sayi==2){ printf(“登录成功”); 打破 } }
我如何才能在没有中断的情况下编写此代码?A不间断交替while循环 int number=0; while(scanf(“%d”、&number)){ 如果(sayi==1 | | sayi==2){ printf(“登录成功”); 打破 } },c,if-statement,while-loop,scanf,C,If Statement,While Loop,Scanf,我如何才能在没有中断的情况下编写此代码?Abreak在这里更好。它更密切地暗示了更优化的装配输出。 但是您可以始终使用另一个变量(顺便说一句,您对scanf的错误检查是错误的) 我建议不要尝试在状态下填充所有内容。它的可读性较差,即使scanf故障最终导致跳出循环(例如,如果/*处理错误*/部分中有not_break=0),您通常仍希望对错误做出不同于对不同输入选择的响应。单独的if是提供此类单独响应的更干净的方法 (我还冒昧地将sayi更改为number,因为使用一个不相关的变量似乎是一个编
break
在这里更好。它更密切地暗示了更优化的装配输出。
但是您可以始终使用另一个变量(顺便说一句,您对scanf
的错误检查是错误的)
我建议不要尝试在
状态下填充所有内容。它的可读性较差,即使scanf
故障最终导致跳出循环(例如,如果/*处理错误*/
部分中有not_break=0
),您通常仍希望对错误做出不同于对不同输入选择的响应。单独的if
是提供此类单独响应的更干净的方法
(我还冒昧地将sayi
更改为number
,因为使用一个不相关的变量似乎是一个编码错误。)中断指令只是一个跳转。您可以改用goto
语句。但是,使用goto
是一种不良做法。使用中断
,代码看起来很好。不管怎样,这就是你用goto
编写它的方式:
整数;//删除了任务,因为它是不必要的。
while(scanf(“%d”、&number)){
如果(数字==1 | |数字==2){//我相信你的意思是数字而不是说你好。
printf(“登录成功”);
去打破你的标签;
}
}
断开标签:
//将其他工作放在此处,如果这是主任务的结尾,则返回0。
另一种方法是使用@PSkocik在另一个答案中提到的标志变量。您可以在while条件中使用三元运算符:
while (
scanf("%d",&number) == 1 &&
(sayi == 1 || sayi == 2) ? (printf("Login succesful"), 0) : 1
);
您还可以链接&&
| |
运算符并使用短路:
while (
scanf("%d",&number) == 1 &&
!( (sayi == 1 || sayi == 2) && (printf("Login succesful"), 1) )
);
首先,请注意while语句中的条件
while (scanf("%d",&number)){
即使调用scanf
未成功,也可以计算为true。因此,至少写一篇文章是正确的
while(scanf(“%d”,&number)==1){
至于循环,那你就在这里
int number = 0;
while ( number != 1 && number != 2 && scanf("%d",&number) == 1 )
{
if ( number == 1 || number == 2 ) printf("Login succesful ");
}
注意:sayi
似乎不会在循环中被更改。因此它的检查最好放在循环之外。或者你只是把它与number
混淆了(这更有意义)。请不要发布不反映你的问题的代码
但是,为了放弃另一种方法,假设有任何东西可以进一步改变循环中的变量sayi
:
您还可以使用带有标志变量的do while
循环:
int i = 1;
do {
// Anything that changes sayi (related to variable number).
if ( sayi == 1 || sayi == 2 ) {
printf("Login successful. ");
i = 0;
}
} while ( i || (scanf("%d",&number) == 1 )
旁注:
虽然(scanf(“%d”,&number))
是危险的/不正确的,就像发生输入错误一样,但返回的值将是EOF
的负值,该值将被计算为true
,循环将继续,尽管存在错误。请改用scanf(“%d”,&number)==1
作为条件
break
有什么问题,以至于您不想使用它?函数族将在出错时返回EOF
。EOF
定义为负值(通常为-1
),在条件中使用时,该值将隐式转换为“true”。因此,如果出现错误或用户按下文件结尾键盘组合,您将有一个无限循环。将返回值与1
进行显式比较。如scanf(…)==1
@Burakkepuc,这并不能回答我的问题,continue/break没有问题。您可以使用goto
s。您可以(ab-)使用&&
和|
运算符或三值运算符,将printf
置于该条件下。为什么要使用它?如果在循环内部,为什么需要呢?如果sayi
实际上在循环内部会发生变化吗?如果不仅仅是在循环外部,然后是在bod中的else
案例的y。或者if
条件应该检查number
?请注意,逻辑上使用变量number
检查它是否包含1
或2
,但在OP的代码中,它是神秘的sayi
,似乎与numb>无关呃
@roberts-supportsmonicacellio是的。我认为这是一个错误。我已经在答案中编辑了一段关于它的内容。谢谢你提到它!这很棘手。注意。-OP的意思可能是number
而不是sayi
,但它仍然是个谜。
int i = 1;
do {
// Anything that changes sayi (related to variable number).
if ( sayi == 1 || sayi == 2 ) {
printf("Login successful. ");
i = 0;
}
} while ( i || (scanf("%d",&number) == 1 )