2015-10-30 108 views
0

好吧,这可能很简单,我很可能会被你骂,但我是新来的c,并试图尽可能地学习。我有这个问题,我解决了,而且逻辑工作相当不错。但是每当有错误的输入,它显示屏幕上的消息,并加上条件是不正确的。因此,无论何时应该有一个无效的输入消息,我也得到NE - 至极就是它会打印出来,如果病情心不是true.This是代码:printf中的输出错误

#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; 
} 
+0

为什么''printf(“Invalid input”)之后'返回1';'?这样它就不会打印'NE'。 – Linus

+0

我不是100%确定有效输入是什么,为什么产生的输出是PAREN或NE? – Mike

+0

为了表明问题已解决,您应该点击对您有帮助的答案左侧的复选标记。 – user3386109

回答

3

它,因为没有什么那阻止它这样做:

如果你只是希望终止只要条件成立,程序只需return

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

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

+0

您可能应该返回一个非零值,因为它是失败的。 – Linus

+0

@wrangler非常感谢!那很有效。还有什么更重要的是我学到了新的东西:)。 – LuanL

0

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

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(”无效输入“)之后;”线。

1

要么你增加一个return声明在其他的答案建议,或者您包括第一else条款中应该发生的有效输入(换句话说,一切,只是移动第一else条款的右括号,就在你的main函数的大括号之前)。

+0

你不需要用“解决”提到编辑问题。只要接受最能解决您问题的答案即可。 – fpierrat

+0

我看到你编辑了你的问题,并删除了你的“解决”提及......但你还没有接受一个答案来关闭这个问题。只需点击左侧的“打勾”,即可选择您决定接受的答案。 – fpierrat