字符串未打印

String not getting printed

我一直在尝试解决一个问题,一切正常,只是没有打印所需的字符串

#include<stdio.h>
int main()
{
int test,i,number,num1;

char ch;
scanf("%d",&test);
for(i=test;i>0;i--)
{
    scanf("%d",&number);

    num1=number;

    while(num1>12)
    {
        num1-=12;
    }

    if(num1>0 && num1<7)
    printf("%d ",(2*(6-num1)+1)+number);


    else
    printf("%d ",number-(2*(num1-7)+1));


    if(num1==(1 || 6 || 12 || 7 ))
    {
        puts("WS");
    }

    if(num1==(2|| 5 || 8 || 11))
    {
        puts("MS");
    }

    if(num1==(3 || 4 || 9 || 10))
    { 
       puts("AS");
    }
    }


return 0;
}

这里连同一个数值,需要打印相应的AS,WS或MS,但是打印数值后,代码就到此为止,我也尝试过其他方法但是none那些工作。我尝试过的其他事情是: 1)用字符数组存储AS、WS或MS,然后用printf打印。 2) 仅使用一个字符并在其中仅存储 A、W 或 M,并将它们与 printf 函数中已经存在的 S 一起打印。在这种方法中,S 被打印但 A、W 或 M 没有。

我认为您对 puts 或 printf 没有问题。我认为您只需将 if 或子句写为

if(num1==1 || num1==6 || num1==12 || num1==7 )

而不是。

if(num1==(1 || 6 || 12 || 7 ))

参见示例。 logical or

我认为 switch case 循环更适合您的需要:

#include<stdio.h>
int main()
{
int test,i,number,num1;

char ch;
scanf("%d",&test);
for(i=test;i>0;i--)
{
    scanf("%d",&number);

    num1=number;

    while(num1>12) num1-=12;


    if(num1>0 && num1<7)
    printf("%d ",(2*(6-num1)+1)+number);


    else
    printf("%d ",number-(2*(num1-7)+1));


    switch(num1){
        case 1:
        case 6:
        case 12:
        case 7:
            puts("WS");
            break;
        case 2:
        case 5:
        case 8:
        case 11:
            puts("MS");
            break;
        default:
            puts("AS");
    }
}

return 0;
}
if(num1==(1 || 6 || 12 || 7 ))

当编译器看到这个 if 条件时,它会检查 num1 是否等于 (1 || 6 || 12|| 7) 的结果,即 1,因为从布尔角度看,所有值都是 true(1) (不是 0)。所以程序会在打印字符的所有 3 if 条件下执行代码,仅当 num1 等于 1 时。

解决方法如下:

if(num1==1 || num1 == 6 || num1 == 12 || num1 == 7)