这是我的代码,如何用 for 循环或 while 循环替换 do while?我应该改变什么?
int main() {
int a;
do {
printf("\nEnter 1 to continue: ");
scanf("%d",&a);
if (a==1){
function=initial(function);
break;
} else {
function=final(function);
}
} while (a!=1);
}
答案 0 :(得分:0)
for 循环不适合这个,你不迭代任何东西(如果你真的想,你仍然可以使用一个)。
要使用 while 循环,请将 a
初始化为 0
:
int a = 0;
while(a != 1){
...
}
对于 for 循环:
int a = 0;
for(;a != 1;){
...
}
但这一切都无关紧要,因为无论如何只要 a
等于 1
,您都会跳出循环。
答案 1 :(得分:0)
我发现输入一个字母后很难解决忙循环的问题:您的 scanf 由于没有数字而什么也读不到,但输入中的字母仍然存在。
因此屏幕上充斥着“输入 1 以继续”,而您输入了“1”,即使您希望它停止,但只有 ctrl-c 有帮助。
如果你真的想要整数“1”或“+1”或“001”作为测试(而不是例如字母“1”的第一次出现),那么你必须阅读整行(=用户确认的内容通过输入)作为字符串并将其转换为整数。
这使用 %ms
格式 - m 就像内存分配。我把它放在一个函数中,所以它适合 while() 条件。否则它只是 while(1)
或 for(;;)
休息。
#include <stdio.h>
#include <stdlib.h>
char *scanf_line1(char *line) {
printf("Enter 1 to continue: ");
scanf("%ms", &line);
return line;
}
int main() {
int loop = 0;
char *line;
while(atoi(scanf_line1(line)) != 1)
loop++;
printf("OK, continuing after %d extra loops\n", loop);
}
印象:
$ ./a.out
Enter 1 to continue: -1
Enter 1 to continue: +1
OK, continuing after 1 extra loops
$ ./a.out
Enter 1 to continue: 111
Enter 1 to continue: r
Enter 1 to continue: rrrrrrrrr1
Enter 1 to continue: rrrrrrrrrrrrrrrrrrrrrr 1
Enter 1 to continue: OK, continuing after 4 extra loops
$ ./a.out
Enter 1 to continue: 5 4 3 2 1
Enter 1 to continue: Enter 1 to continue: Enter 1 to continue: Enter 1 to continue: OK, continuing after 4 extra loops
$ ./a.out
Enter 1 to continue: 2 00000000000000000000001
Enter 1 to continue: OK, continuing after 1 extra loops
突然它可以处理隐藏的数字,而不是崩溃。只是该行中每个非 1 个单词的重复消息。