当输入字符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
答案 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);