C语言 函数返回错误的号码



我对这段代码有一个问题,它在输出中给了我错误的数字,当我输入例如5时,它给了我5。这没有意义,因为我想要0到x之间的数的和。

#include <stdio.h>
void suma_n_nums(int n);
int main() {
int x;
printf("Introduzca un numero: ");
scanf("%d", &x);
suma_n_nums(x);
return 0;
}
void suma_n_nums(int n) {
int i;
int suma;
if (n > 0) {
for (i = 1; i <= n; i++) {
suma += i;
}
}
printf("El resultado de la suma es: %d", suma);
}
  1. 检查scanf
  2. 返回值

你想要像

if (scanf("%d", &x) != 1) {
fprintf("You have not entered a valid numbern");
retrun -1;
}
  1. 初始化变量

    int suma = 0;
    
  2. 对于额外的信用-转储For循环

    int suma = (n * (1 + n)) / 2;
    

考虑到这一点,代码可以是

#include <stdio.h>
int main()
{
int x;
printf("Introduzca un numero: ");
if (scanf("%d", &x) == 1) {
printf("El resultado de la suma es: %d", (x * (x + 1)/2);
return 0;
} else {
fprintf("You have not entered a valid numbern");
retrun -1;
}
}
#include <stdio.h>
#include <stdlib.h>
void suma_n_nums(int n);
int main()
{
int x;
printf("Introduzca un numero: ");
if (scanf("%d", &x) != 1) {
fprintf(stderr, "Error: Scanf failuren");
exit(EXIT_FAILURE);
}
suma_n_nums(x);
return 0;
}
void suma_n_nums(int n) {
int i, suma = 0;
if (n > 0) {
for (i = 1; i <= n; i++) {
suma += i;
}
printf("El resultado de la suma es: %dn", suma);
} else {
fprintf(stderr, "Error: Number must be bigger than 0n");
exit(EXIT_FAILURE);
}
}

必须始终检查scanf的返回值,我还增加了对负值的检查;如果输入为负值,则程序退出并显示错误消息。

最新更新