字符串未打印
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)
我一直在尝试解决一个问题,一切正常,只是没有打印所需的字符串
#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)