C中的循环和条件问题

时间:2012-03-28 19:54:55

标签: c

EDIT2 :通过将第38行和第56行的answer = getchar();替换为scanf("%d", &answer);来修复此问题并自行修复,但我不知道原因。

修正版:

Do you order Fish? (Y/N): g
Please enter Y or N only: g
Please enter Y or N only: g
Please enter Y or N only: g
Please enter Y or N only: y
Fish choice (K- Haddock, T- Halibut): x
Please enter K or T only: x
Please enter K or T only: x
Please enter K or T only: x
Please enter K or T only: k
What size (L - Large, M - Medium, S - Small): x
Please enter S, M, or L only: x
Please enter S, M, or L only: x
Please enter S, M, or L only: x
Please enter S, M, or L only: l
How many orders do you want? (>=0): 2

修改

完整的来源,以防您想要编译并查看最新动态:http://pastebin.com/raw.php?i=83y0SLHQ

好吧所以下面的所有内容实际上都有效,这很好,现在有一个新问题:

输出

Do you order Fish? (Y/N): y
Please enter Y or N only: n
Fish choice (K- Haddock, T- Halibut): s
Please enter K or T only: K
What size (L - Large, M - Medium, S - Small): x
Please enter S, M, or L only: L
How many orders do you want? (>=0): 2

问题:请注意如果我输入y作为选项,它会告诉我再次输入Y或N即使它有效吗?它不应该这样做。除了带有(Y / N)的第一个循环外,所有其他循环都有效。

我进行了一些调试,并在第一行之后打印了rc的值,其ASCII值为10,这意味着我的answer值实际读入{{ 1}}然后仅在第二次提示后,它会读入正确的ASCII值\n并进行比较。

为什么首先考虑y

旧帖子

我有一个程序,我必须验证用户输入。如果用户输入说“y”,“Y”,“n”或“N”,则它们通过验证。如果他们输入任何东西,程序输出:

\n

我为此制作了please enter Y or N only函数。值如下传递给它:

如果我希望它只验证字符YNyn,我会这样做:

verify

YNyn是我要验证的字符,2是大写字符的数量。

在我的验证函数中,我看到我的第二个参数是否等于2或3.(如果我有verify("YNyn", 2); SML是小中等大,那就是3。

我在verify("SMLsml", 3);中添加了以查看验证函数中第一个参数的ASCII值是什么,并且它们都正确对应。

OUTPUT :这意味着Y为89,N为78,y为121,n为110.-后面的值为我输入的值(Y)。 -1是变量printf的值。

rc

问题:if语句不验证,因此rc未设置为1.

Do you order Fish? (Y/N): Y

Y:89 N:78 y:121 n:110 - answer:89 rc:-1

我也尝试过:

if ((answer == validAnswers[0])
 || (answer == validAnswers[1])
 || (answer == validAnswers[2])
 || (answer == validAnswers[3]))
  { rc = 1; }

但是无济于事,我已经尝试将if语句重新格式化为一行,但是没有用。

这意味着如果我输入的值对应于Y,N,y或n的ASCII值,那么变量if (answer == validAnswers[0] || answer == validAnswers[1] || answer == validAnswers[2] || answer == validAnswers[3]) {rc = -1 } 应该设置为1.不幸的是它没有这样做,问题在于if语句。

如上所示,在rc中,最后一个值(变量89 78 121 110 - 89 -1),值为-1。这意味着省略了我的if语句。为什么省略它们而不将rc设置为-1?

验证功能

rc

2 个答案:

答案 0 :(得分:3)

它报告-1并继续没有错误的原因是因为它实际上正在工作。 :)

然而,它报告-1,因为你的printf位于循环的顶部,并在语句和rc设置之前将值打印到1。

将您的printf移到正上方循环的末尾,以查看正确的值。

答案 1 :(得分:-1)

打印后有一个getchar,那么你不是要比较第一个getchar的值,而是从第二个得到。