【问题标题】:Wrong output in printfprintf 中的错误输出
【发布时间】:2015-10-30 22:54:26
【问题描述】:

我是 C 的新手,正在努力学习。我有这个问题,我解决了,逻辑工作得很好,但是只要输入错误,它就会在屏幕上显示消息,并且条件不正确。因此,每当应该有一个无效输入消息时,我也会得到 NE - 如果条件不正确,它将打印出来。

这是代码:

#include <stdio.h> 
#include <stdlib.h>

int main() {
    int a, b;
    scanf("%d %d", &a, &b);
    if(a <= 0 || b <= 0) {
        printf("Invalid input");
    } else {
        if(a < b) {
            int tmp = a;
            a = b;
            b = tmp;
        }
    }
    a/=10;
    int c1,c2;
    while (a!=0 && b!=0){
        c1 = a%10;
        c2 = b%10;
        a /= 100;
        b /= 10;
    }
    if (c1 == c2)
        printf("PAREN\n");
    else
        printf ("NE\n");
    return 0;
}

【问题讨论】:

  • 你为什么不在printf("Invalid input");之后return 1?这样它就不会打印NE
  • 我不能 100% 确定有效输入是什么,为什么结果输出是 PAREN 或 NE?
  • 要表明问题已解决,您应该点击帮助您的答案左侧的复选标记。
  • @Mike 有效输入都是大于 0 的整数。如果小数的数字位于大数的偶数位,则输出为 PAREN,从右到左读取。
  • 请不要编辑您的问题以包含“已解决”。如果任何答案实际上提供了答案,您可以将其标记为已接受 - 仅此而已。如果他们都没有这样做,而您自己找到了答案,您可以提交自己的解决方案作为答案。

标签: c syntax logic


【解决方案1】:

因为没有什么可以阻止它这样做:

如果您只想在条件为真时终止程序只需return

if(a <= 0 || b <= 0) {
printf("Invalid input");
return 1;
 } 

替代方案:只需在else 子句下添加其余代码即可。

【讨论】:

  • 你可能应该返回一个非零值,因为它是失败的。
  • @wrangler 非常感谢!那行得通。更重要的是我学到了一些新东西:)。
【解决方案2】:

您可以按照其他答案中的建议添加return 语句,或者您在第一个else 子句中包含有效输入应该发生的所有事情(换句话说,只需移动结束第一个 else 子句的大括号,就在 main 函数的右大括号之前。)

【讨论】:

  • 您无需编辑带有“已解决”提及的问题。只需接受最能解决您的问题的答案即可。
  • 我看到您编辑了您的问题并删除了您的“已解决”提及...但您仍然没有接受一个答案来关闭主题。只需单击您决定标记为已接受的答案左侧的“打勾”。
【解决方案3】:

首先,让我们重新格式化代码,以便更容易看到控制流:

int main()
{
    int a, b;
    scanf("%d %d", &a, &b);
    if(a <= 0 || b <= 0) {
        printf("Invalid input");
    } else {
        if(a < b) {
            int tmp = a;
            a = b;
            b = tmp;
        }
    }
    a/=10;
    int c1,c2;
    while (a!=0 && b!=0){
        c1 = a%10;
        c2 = b%10;
        a /= 100;
        b /= 10;
    }
    if (c1 == c2)
        printf("PAREN\n");
    else
        printf ("NE\n");
    return 0;
}

这里发生的情况是,当它打印“无效输入”时,程序继续运行。从这里它可以打印“PAREN”或“NE”。

我怀疑您真正想要做的是在确定输入无效后停止处理。

在您的代码中执行此操作的最简单方法是添加“return 0;”紧跟在“printf(”无效输入“);”之后行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-15
    • 1970-01-01
    • 2016-02-01
    • 1970-01-01
    • 2016-07-19
    • 1970-01-01
    相关资源
    最近更新 更多