【问题标题】:String not getting printed字符串未打印
【发布时间】:2019-01-13 06:41:33
【问题描述】:

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

#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,但是打印完数值后,代码就到此为止了,我也尝试了其他的方法,但都没有奏效。我尝试过的其他事情是: 1) 使用字符数组存储 AS、WS 或 MS,然后用 printf 打印。 2) 仅使用一个字符并仅在其中存储 A、W 或 M,并将它们与 printf 函数中已经存在的 S 一起打印。在这种方法中,S 被打印,但 A、W 或 M 没有。

【问题讨论】:

  • 这不是逻辑 OR 的工作原理。您需要分开比较。
  • 关于这种声明:` if(num1==(1 || 6 || 12 || 7 ))` 应该是:if( num1 == 1 || num1 == 6 || num1 == 12 || num1 == 7 ) 你的编译器应该已经告诉你这个问题.编译时,始终启用警告,然后修复这些警告。 (对于gcc,至少使用:-Wall -Wextra -Wconversion -pedantic -std=gnu11)注意:其他编译器使用不同的选项来执行相同的操作
  • OT:为了便于阅读和理解:1) 一致地缩进代码。在每个(甚至省略可选的)左大括号“{”之后缩进。在每个(甚至省略可选的)右大括号“}”之前取消缩进。建议每个缩进级别为 4 个空格

标签: c printf puts


【解决方案1】:

我不认为你有 puts 或 printf 的问题。我认为您只需将 if 或子句编写为

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

而不是。

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

参见例如。 logical or

【讨论】:

  • 谢谢,成功了。我从来不知道我专注于代码的错误部分。
【解决方案2】:

我认为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;
}

【讨论】:

  • 谢谢,它成功了。我忽略了 switch case,因为我想使用逻辑或者老实说,我从来不知道,我们以这种方式使用 switch case。
【解决方案3】:
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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多