为啥我在c编程中不能成功使用return选项?

Posted

技术标签:

【中文标题】为啥我在c编程中不能成功使用return选项?【英文标题】:Why can't I successfully use the return option in c programming?为什么我在c编程中不能成功使用return选项? 【发布时间】:2022-01-15 00:17:53 【问题描述】:

我写了代码来计算总和到某个数n,如果不是自然数就写不是,或者如果一个数没有输入就说它没有输入并且程序停止工作,一切都完成了,但它根本没有在 if 循环下面加载这部分,我该如何解决这个问题并放置返回或其他选项?


int main() 
  int i, n, s = 0;
  printf("input n: ");
  scanf("%d", &n);
 if (n<0) 
    printf(" Not natural number");return 0;
 if (n != scanf("%d", &n)) 
    printf("No number!");return 0;
  for (i = 1; i <= n; i++)
    s = s + i * i;
  printf("s is: %d", s);
  return 0;

【问题讨论】:

你可以阅读这个:你可以试试这个:***.com/questions/54073157/…,但是主题很广泛。 n != scanf("%d", &amp;n) 是一个错误,因为它没有明确定义的行为。未指定 != 的左操作数是在右操作数之前还是之后计算。 请不要破坏您的问题,因为它会使现有答案无效。 【参考方案1】:

你的程序逻辑错了:

 if (n<0) 
    printf(" Not natural number");return 0;
 // here you call scanf  again without any reason
 // just remove the two lines below
 if (n != scanf("%d", &n)) 
    printf("No number!");return 0;

你想要这个:

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

int main() 
  int i, n, s = 0;
  printf("input n: ");
  scanf("%d", &n);
  if (n < 0) 
    printf(" Not natural number"); return 0;
  

  for (i = 1; i <= n; i++)
    s = s + i * i;
  printf("s is: %d", s);
  return 0;

不要尝试使用scanf 验证输入。这是不可能的。在您更加精通 C 之前,不要关心输入验证。

【讨论】:

【参考方案2】:

您需要检查 scanf 的返回值以查看扫描是否成功。它返回扫描值的数量。此外,应将错误消息打印到标准错误流。试试这个:

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

int main(void)

    int c, i, n, s;

    printf("input n: ");    
    c = scanf("%d", &n);
    if (c != 1) 
        fprintf(stderr, "No number!\n");
        exit(EXIT_FAILURE);
     else if (n < 0) 
        fprintf(stderr, "Not natural number\n");
        exit(EXIT_FAILURE);
    
    s = 0;
    for (i = 1; i <= n; i++) 
        s = s + i * i;
    
    printf("s is: %d\n", s);
    return 0;

【讨论】:

这种方法有效,因为如果输入无效,我们将退出程序。如果我们想在输入无效的情况下请求一个新的输入,它会变得更加复杂。 stderr 可用于错误消息。没有要求。

以上是关于为啥我在c编程中不能成功使用return选项?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我们不能在 C 语言中拥有两个主要功能?

我在使用C#进行编C/S程序的时候,设计器模式不能进入

用vs2019编写c语言程序,明显语法错误为啥不回报错,没有加return 0;

keil uvision4编编程为啥注释汉字都是方格,无论调啥汉字输入法都不行,你找到解决方法没有?

c语言中为啥函数不能重名?请举个函数重名的例子,谢谢

在C语言进行编程中,为啥要释放旧内存?