如何用 for 循环或 while 循环替换 do while 循环?

时间:2021-05-04 19:21:32

标签: c for-loop while-loop do-while

这是我的代码,如何用 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);
}

2 个答案:

答案 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 个单词的重复消息。