gpt4 book ai didi

C - 基于用户决策的 do/while 循环无法正常工作

转载 作者:太空狗 更新时间:2023-10-29 15:02:03 26 4
gpt4 key购买 nike

我有一个问题,经过多次测试,我认为这是因为我不了解输入缓冲区的工作原理。

我有一个 while 循环,它应该继续迭代,直到用户输入“否”停止迭代。

我有两个问题。

  1. 无论用户输入“否”或任何不等于"is"的内容,while 都不会停止迭代
  2. 如您所见,第二个周期的输出有问题。该程序不会要求用户输入字符串并跳过该步骤,就像用户只需键入 ENTER 一样。

代码:

int foo = 0;

do{

int i, cycles;
char array[MAX_LENGTH+1];



for(cycles=0; cycles < MAX_READ_CYCLES; cycles++){

i=0;

printf("\n\nEnter a string: ");

char ch;
while ((ch = getchar()) != '\n' && ch != EOF) {
array[i] = ch;
i++;
}

array[i] = '\0'; //string terminator


printf("String you entered: %s\n", array);

printf("\nDo you want to continue? 1: yes / 0: no \n");
scanf("%d", &foo);

}

} while( foo == 1);

输出

Enter a string: test
String you entered: test

Do you want to continue? 1: yes / 0: no
0

Enter a string: String you entered:

Do you want to continue? 1: yes / 0: no
3

Enter a string: String you entered:

Do you want to continue?

最佳答案

由于内部 for 循环,如果用户输入 "yes",您的程序不会终止:

#include <stdio.h>
#include <string.h>
#define MAX_LENGTH 100
#define MAX_READ_CYCLES 100

int main() {
int cycles = 0;
char foo[4];
do {
char array[MAX_LENGTH + 1];

printf("\n\nEnter a string: ");

char ch;
int i = 0;
while ((ch = getchar()) != '\n' && ch != EOF) {
array[i] = ch;
i++;
}

array[i] = '\0'; //string terminator


printf("String you entered: %s\n", array);

printf("\nDo you want to continue?");
scanf("%s", foo);

cycles++;

while ((ch = getchar()) != '\n' && ch != EOF); // force drop stdin

} while (strcmp(foo, "yes") == 0 && cycles < MAX_READ_CYCLES);
}

另见 I am not able to flush stdinhttp://c-faq.com/stdio/stdinflush2.html

关于C - 基于用户决策的 do/while 循环无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34456101/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com