C语言编程中遇到困难(刚开始学)
发布网友
发布时间:2022-03-01 17:19
我来回答
共5个回答
热心网友
时间:2022-03-01 18:49
这个程序中你平凡调用的输入函数 scanf 的调用格式为: scanf("格式化字符串“,地址表);
两个参数!每个参数的格式都不一样,第一个是字符串,即char* 的数据类型,第二个是一个指针类型的数据,即地址,而C编译器会把”“之间的东西当做字符串,这个等你学到字符串数据类型会明白。你所犯的错误就是把地址表也放进了”“当中,这样的后果很明显,就是函数缺少参数,虽然你的第一个参数类型匹配(是一个字符串,显然没有”%d,&yw“这种格式的数据,你的意思是”%d“类型的数据),但是却少第二个参数,所以内存必然会报错,因为编译器不知道你要把数据存到什么变量里面去,在写程序的时候,应该多站在编译器的角度想想,这样你才会了解错误的根源。我写个小例子,让你更多的了解这个scanf 函数参数的本质。
# include<stdio.h>
int main()
{
char *p = "%d";
int i;
scanf(p,&i); // 假设你输入3
printf(p,i); // 此处打印3
return 0;
}
表面上看这段程序中的函数参数是错误的,没有按照书上说的格式来,但是追求其参数本质,编译器把所有的字符串类型当做指针来看,在这里p是一个字符串指针,指向”%d“这个字符串,所以作为参数传进scanf是完全没问题的。而且对于scanf函数的参数应该是最少两个,且为偶数,
一个字符串指针参数跟一个地址参数相对应,其实就是两个指针。对于指针目前你不必深究,在系统的学习了前面的基本知识后再去研究内存问题。
热心网友
时间:2022-03-01 20:07
全改为scanf("%d",&sx);
记住,每个输出的%d,对应后面的一个常量的地址,所以不要把“”里面放常量地址。
而且下面最好把;放在语句最后,养成一个好习惯:
zf=yw+sx+yy+wl+hx+zz*0.8+ls*0.5+0.3*(dl+sw+ty);/*计算总分*/
^_^
热心网友
时间:2022-03-01 21:41
所有的scanf("",)中的引号都用错地方了!
scanf("%d,&yw");
改成scanf("%d",&yw);
看来你还是个高中生啊,不错不错,加油。
热心网友
时间:2022-03-01 23:33
#include <stdio.h>
int main()
{
int yw,sx,yy,wl,hx,zz,ls,dl,sw,ty,zf;/*定义代表各科成绩的函数*/
printf("请根据提示输入各科考试成绩并回车,\n程序会按茂名中考计分标准计算总分。\n如果没有该科,请输入0。\n");
printf("下面请开始输入。\n语文?\n");
scanf("%d",&yw);
printf("数学?\n");
scanf("%d",&sx);
printf("英语?\n");
scanf("%d",&yw);
printf("物理?\n");
scanf("%d",&wl);
printf("化学?\n");
scanf("%d",&hx);
printf("*?\n");
scanf("%d",&zz);
printf("历史?\n");
scanf("%d",&ls);
printf("地理?\n");
scanf("%d",&dl);
printf("生物学?\n");
scanf("%d",&sw);
printf("体育?\n");
scanf("%d",&ty);
zf=yw+sx+yy+wl+hx+zz*0.8+ls*0.5+0.3*(dl+sw+ty)/*计算总分*/;
printf("你的总分是:\n");
printf("%d", zf);
printf("好好学习,天天向上!\nBest wishes to you!\nGoodbey!\n");
sleep(60000);
return 0;
}
帮你改过来了
热心网友
时间:2022-03-02 01:41
上面说的对 而且你的zf定义的是int类型 但是你后面复制的是double类型 我不知道你的编译器 我有的是vs 改为 (int)zf=yw+sx+yy+wl+hx+zz*0.8+ls*0.5+0.3*(dl+sw+ty)/*计算总分*/;
如果不对你去看看你的强制转换格式就行
我不知道你的sleep(60000)啥意思 我把这一句给注销了
正确代码:
#include <stdio.h>
int main()
{
int yw,sx,yy,wl,hx,zz,ls,dl,sw,ty,zf;/*定义代表各科成绩的函数*/
printf("请根据提示输入各科考试成绩并回车,\n程序会按茂名中考计分标准计算总分。\n如果没有该科,请输入0。\n");
printf("下面请开始输入。\n语文?\n");
scanf("%d",&yw);
printf("数学?\n");
scanf("%d",&sx);
printf("英语?\n");
scanf("%d",&yy);
printf("物理?\n");
scanf("%d",&wl);
printf("化学?\n");
scanf("%d",&hx);
printf("*?\n");
scanf("%d",&zz);
printf("历史?\n");
scanf("%d",&ls);
printf("地理?\n");
scanf("%d",&dl);
printf("生物学?\n");
scanf("%d",&sw);
printf("体育?\n");
scanf("%d",&ty);
(int)zf=yw+sx+yy+wl+hx+zz*0.8+ls*0.5+0.3*(dl+sw+ty)/*计算总分*/;
printf("你的总分是:\n");
printf("%d", zf);
printf("好好学习,天天向上!\nBest wishes to you!\nGoodbey!\n");
//sleep(60000);
return 0;
}