gpt4 book ai didi

c - do-while 语句中的逻辑错误?

转载 作者:太空宇宙 更新时间:2023-11-04 08:46:13 25 4
gpt4 key购买 nike

我必须告诉你,我已经搜索过这个网站和其他网站,但我无法解决我的问题。我正在做一个适用于某些列表的程序。代码将值从第二个列表复制到第一个,条件是:列表 2 的当前值必须小于列表 1 中的值。如果此条件为真,则复制值。但这不是重点。我创建了一个名为 GetExitValue() 的函数,它在 main 的末尾获取用户输入是否继续。这就是问题所在。当我在 main 中调用该函数(一段时间内)时,即使我插入 n (否),它也会继续运行程序。你能告诉我我做错了什么吗??非常感谢你们!!

这就是我的简化代码。

int main(){

do{
.
.
.
.
printf("\nProgram finished. Do you wish to re-execute the program? \n\nPress y/Y (Yes) to continue. Press n/N (No) to exit. ");

}
while(GetExitValue() == 'y' || 'Y' ); // **Problem here!!**

return 0;
}


char GetExitValue(){
char exit_value;

scanf(" %c", &exit_value);
while(exit_value != 'y' && exit_value != 'n' && exit_value != 'Y' && exit_value != 'N'){
printf("Value incorrect. insert y or n!!\n");
scanf(" %c", &exit_value);
}
return exit_value;
}

最佳答案

这部分:

while(GetExitValue() ==  'y' || 'Y' ); // **Problem here!!**

您正确发现的内容可能没有按照您的意思行事。这 始终 为“真”,因为“Y”(在 ASCII 中不是 0)始终为“真”。

你的代码中确实有这个:while (condition || 1) 这可能很有用,但在这种情况下没有用。

你可能是这个意思:

.
.
// run GetExitValue() only once...
char gev = GetExitValue();
}
while(gev == 'y' || gev == 'Y' );

我只想指出,您可以执行以下操作:

.
.
}
while(GetExitValue()); // no need to store value!

如果您将 GetExitValue() 更改为在用户不希望它再次运行时返回 0:

char GetExitValue(){
char exit_value;

scanf(" %c", &exit_value);
while(exit_value != 'y' && exit_value != 'n' && exit_value != 'Y' && exit_value != 'N'){
printf("Value incorrect. insert y or n!!\n");
scanf(" %c", &exit_value);
}

return exit_value == 'Y' || exit_value == 'y'; //evaluates to 1 if true
}

它可能会更干净,您可以将它的名称更改为 shouldRunAgain(),根据我个人的喜好,它的信息量更大:)

关于c - do-while 语句中的逻辑错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21588218/

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