arrays - 如何在 C 语言中比较 char 数组和 char
问题描述
下面的代码有什么问题?
我被困在 do while 循环中。我比较性格错了吗?我也尝试过使用scanf("%c", &answer);
但结果相同
char answer[10];
for (i = 0; i < wish; i++)
{
/* ... */
/* ... */
do
{
printf(" Does this item have financing options? [y/n]:");
scanf("%s", &answer[i]);
if ((answer[i] != 'y' )|| (answer[i] != 'n'))
{
printf("\nERROR: Must be a lowercase 'y' or 'n'");
}
} while ((answer[i] != 'y') || (answer[i] != 'n'));
解决方案
您被困在循环中,因为您继续循环的条件始终为真。
如果您看不清楚,请尝试命名一个既不与“y”不同也不与“n”不同的字母。
以“a”为例,两者都不同。
以“n”为例,它与“n”没有区别,但与“y”不同。
以“y”为例,它与“n”不同,但与“y”没有不同。
所以无论输入什么字母,循环都会继续。
要解决,请使用 Chris 的评论并更改为
((answer[i] != 'y' ) && (answer[i] != 'n'))
这样,除“n”或“y”之外的任何其他字母都将不同于“n”并且不同于“y”并将继续循环,而“y”和“n”都将不同于至少一个两者并结束循环。
一旦你得到了正确的条件,它可能只需要一次,即只在循环中。if
至少在显示的代码中,不需要额外的。除了您在此处显示的内容之外,您可能还有需要它的代码。
推荐阅读
- android - 每次调用 Activity 的 onCreate() 时都会调用 Repository 中的刷新(不在屏幕旋转中)
- javascript - 如何将对象推送到 vueJS 中的承诺?
- file-upload - 如果通过 setValue 设置要上传的文件,则不会触发 SAPUI5 Fileuploader 上传
- r - 在栅格上绘制坐标
- google-apps-script - 写入表格的 Google 脚本
- python - Django - 限制 Stripe SuccessUrl 访问
- javascript - 用于 JS 的 Eclipse 2020 语言服务器在 thymeleaf 上向 javascript 变量显示错误
- documentation - 开发人员技术文档
- python - 如何有效地分配给 TensorFlow 中的张量切片
- sql - 查找值是否在 SQL 中不存在