为啥我在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", &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选项?的主要内容,如果未能解决你的问题,请参考以下文章
用vs2019编写c语言程序,明显语法错误为啥不回报错,没有加return 0;