我的代码没有问题。我做错了吗?

时间:2019-05-16 04:30:11

标签: c

我刚刚学习编程和英语。我是新手。

我的代码应该显示输入的数字为1。

(例如:如果输入5,答案为15,如果输入10,答案为55)

此代码无法正常工作。我已经尝试了很多次来修复它,但是我不知道为什么这段代码无法正常工作。


#include <stdio.h>

int main(void){

    int i = 0;
    int sum;
    int j;

    scanf("%d\n", sum);
    for(j = 1; j <= sum; j++){

     i = i + j;}

    printf("%d\n", i);
    return 0;
}

3 个答案:

答案 0 :(得分:2)

尝试一下:

#include <stdio.h>

int main(void){

  int i = 0;
  int sum;
  int j;

  scanf("%d", &sum);
  for(j = 1; j <= sum; j++){

   i = i + j;}

  printf("%d\n", i);
  return 0;
}

您的错误只是写成scanf(“%d \ n”,sum)而不是scanf(“%d”,&sum);

答案 1 :(得分:2)

您的代码问题很简单,一个不错的编译器会警告您:

testprog.c: In function ‘main’:
testprog.c:9:11: warning: format ‘%d’ expects argument of type ‘int *’,
                          but argument 2 has type ‘int’ [-Wformat=]
     scanf("%d\n", sum);
           ^

scanf函数需要您要填充的项目的地址,因为它需要更改它们。将实际项目(因为C是按值传递)传递给函数只能更改副本,而不能更改原始副本。

您可以在标准中看到正确的方法:

  

d:匹配一个可选的带符号十进制整数,其格式与strtol函数的主题序列所期望的格式相同,基本参数的值为10。相应的参数应为 指针 指向有符号整数。


顺便说一句,我已经修复了该问题,并增加了一些改进,例如:

  • 易于理解的变量名(sum变量在任何阶段都不是总和);
  • 更好(更符合逻辑)的代码布局;
  • 更好地界定i之类的临时变量。
  • 提示用户输入内容,以便他们知道应该输入什么内容;和
  • 通过检查scanf的返回值来检查有效输入。

代码是:

#include <stdio.h>

int main(void){
    int maxNum;
    int sum = 0;

    printf("Enter number to sum up to: ");
    if (scanf("%d", &maxNum) != 1) {
        fprintf(stderr, "Problem getting input\n");
        return 1;
    }

    for (int i = 1; i <= maxNum; ++i) {
        sum += i;
    }

    printf("Sum is %d\n", sum);
    return 0;
}

答案 2 :(得分:1)

c语言支持call by value类型,用于传输复制的数据。 因此,您需要提供scanf函数可以将用户输入写入sum变量内存的内存地址。

scanf("%d", &sum)