如何正确设置开关状态?

时间:2015-11-16 03:28:02

标签: c if-statement switch-statement do-while

当输入字符A B或C时,它返回它们的数值。

如果第一次输入任何内容,则会打印Default语句。 那么如果输入A B或C,它会正确打印,但之后无论什么都会打印出Default语句。

ALTER PROCEDURE [dbo].[SP_CHADOTHERREPORTS]
@Subreport as varchar(100),
@TableName as varchar(100),
@AccountCode as varchar(100),
@ReportName as varchar(100),
@AcctPeriod as numeric(18,0),
@AcctYear as numeric(18,0)

AS
IF @Subreport = 'REPORT1'
BEGIN
DECLARE @Query as varchar(1000)
SET @Query = 
'UPDATE CHADotherCharges ' +
' SET Jan = ( ' +
' SELECT Jan FROM '+ @TableName +
' WHERE CHADothercharges.acctcode = '''+ @AccountCode +'' +
' AND ReportName = '+ @ReportName + 
' AND acctperiod = '+ convert(varchar(18), @AcctPeriod) +
' AND acctyear = '+ convert(varchar(18), @AcctYear) +
') ' +
'FROM Chadothercharges WHERE type IN(''+'',''SUM'',''-'')'
EXEC (@Query)
END

3 个答案:

答案 0 :(得分:1)

您的错误似乎是您输入的if语句只有在您输入“A' ' B'或者' C'。在我看来,我认为最好不要在这个程序中使用if语句。相反,只需保持do while循环,代码就可以正常运行。

答案 1 :(得分:0)

您应该使用逻辑OR ||而不是按位OR |在这种情况下您仍然可以使用|但它有助于代码更易读)。您可能会遇到使用输入函数的问题,因为当用户通过getchar()输入输入时,它实际上会发送2个字符,比如A\n,因此您需要再次使用换行符getchar()

我已在此处修改了您的代码,但它仍然会执行相同的操作:

#include <stdio.h>

main ()
{
    char ABC;
    char c1 = 'A';
    char c2 = 'B';
    char c3 = 'C';

    printf("Please enter either A, B, or C (case sensitive):");
    ABC = getchar();

    while(ABC != c1 && ABC != c2 && ABC != c3)
    {
        getchar(); // Consume \n
        printf("The character you have entered is not valid.\n");
        ABC = getchar();
    }

    switch (ABC)
    {
    case 'A':    
        printf("The numerical value of A is: %d\n", c1);
        break;

    case 'B':    
        printf("The numerical value of B is: %d\n", c2);
        break;  

    case 'C':    
        printf("The numerical value of C is: %d\n", c3);
        break;  
    }

    return 0;
}

答案 2 :(得分:0)

为什么不删除if语句,因为如果你这样做,你将有机会让你的默认情况成立,另外一个原因是你可能有错误:

while ((ABC = getchar()) != c1 | c2 | c3);

进入:

while ((ABC = getchar()) != c1 | ABC != c2 | ABC != c3);