我刚刚学习编程和英语。我是新手。
我的代码应该显示输入的数字为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;
}
答案 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)