Ⅰ 新手学c语言,有个程序越写头脑越乱,求帮助
//---------include&define
#include <stdio.h>
#include <stdlib.h>
#include <String.h>
#define MAX_STRING 128
#define INITIAL_SIZE 1
typedef char String[MAX_STRING];
//---------enum
typedef enum{
mammal=0,
insect,
bird,
fish
}Type;
//---------array of structure
typedef struct {
String name;
float size;
Type type;
}AnimalType;
typedef AnimalType AmazonType[INITIAL_SIZE];
//---------Initialize
void InitializeType(AnimalType *pAnimal){
strcpy(pAnimal->name,"name");
pAnimal->size = 0;
pAnimal->type = (Type)0;
}
void InitializeAnimal(AmazonType Amazon){
for(int Index=0;Index<INITIAL_SIZE;Index++){
InitializeType(&Amazon[Index]);
}
}
//---------Input
AnimalType GetInfo(void){
AnimalType Animal;
printf("Enter animal inforamtion ('exit' to exit) \n");
printf("What is the name :");
fflush(stdin);//!!!!!!!!!!!!!!清除键盘缓存
scanf("%s",Animal.name);
if(strcmp(Animal.name,"exit"))//<<<加这里 发现请求退出输入状态,就不再继续输入了
{//<<<
printf("What is the size :");
fflush(stdin);//!!!!!!!!!!!!!!清除键盘缓存
scanf("%f",&Animal.size);
printf("What is the type :");
fflush(stdin);//!!!!!!!!!!!!!!清除键盘缓存
scanf("%u",&Animal.type); //这种输入法能搞出其它值来,其实就是当整数输入处理 不能保证得到的是合法的枚举值 上面枚举定义了只有0 1 2 3
}//<<<
return (Animal); //这个传值反回效率太低下
}
//---------Malloc
void* Malloc(size_t Size){
void * Memory;
if((Memory = malloc(Size))==NULL){
perror("Cannot malloc");
exit(EXIT_FAILURE);
}else{
return(Memory);
}
}
//---------Print
void PrintTypes(AnimalType Type){
printf("%s has size %lf and is a %d\n",Type.name,Type.size,Type.type);
}
//---------Main
int main(void){
AmazonType Amazon;//<<< 一个元素的数组真的需要么??
AnimalType *Data;
int Size=INITIAL_SIZE;
int Index,LastIndex;
InitializeAnimal(Amazon);
//Data = &Amazon[Size];//<<< 无效的语句且是错误的指向
Data = (AnimalType*)Malloc(Size*sizeof(AnimalType));
if(Data==NULL){
printf("Error!");
exit(EXIT_FAILURE);
}
LastIndex=-1;
//while(strcmp(Amazon[Size].name,"exit")!=0){ //Amazon[Size].name越界访问了,最多只可访问Amazon[Size-1]
while(1){
LastIndex++;
if(LastIndex == Size){
Size *= 2;
Data = (AnimalType*)realloc(Data,Size*sizeof(AnimalType));
}
Amazon[0]=GetInfo();
if(strcmp(Amazon[0].name,"exit")==0) break;//<<<退出加这里
Data[LastIndex] = Amazon[0];//<<<添加 这是结构体传值,就是一个内存块的整体拷贝了
};
printf("The following new species were found: \n");
//for(Index=0;Index<Size;Index++){ //<<<Size可能大于LastIndex LastIndex才是实际个数
for(Index=0; Index < LastIndex; Index++){
//PrintTypes(Amazon[Index]);
PrintTypes(Data[Index]);
}
free(Data);
return(EXIT_SUCCESS);
}
//尽量保持原样
上面程序还可以大改进 完全没必要AmazonType类型,一个元素的数组总是可以用一个元素来替掉还可以少写那么多的中括号...
Ⅱ 刚学c语言 编写的简单的程序 为什么总出错呢 帮那你看看哪里不对 谢谢
你的格式是错的,一行只能有一条预处理指令,代码改成如下:
#include <math.h>
#include <stdio.h>
int main(void)
{
double x,s;
printf("input number:\n");
scanf("%lf",&x);
s=sin(x);
printf("sine of %lf is %lf\n",x,s);
return 0;
}
Ⅲ C语言初学者:很多代码都看不明白怎么办
多看看书
是对的
看书不要死看
先把基本的语法
看懂
再
要看他的算法
掌握这两点
就不会很吃力了
有的刚开始看不怎么明白
你一定要坚持
等看到后面
有时你就会豁然开然
前面为什么不怎么懂了
Ⅳ 求助 C语言 ····刚开始学 完全摸不着头脑啊 ···
#include<stdio.h>
#include<math.h>
double main(void)
{
float weight=0.0;
float pounds;
while(weight>=0.0)
{
printf("Enter your weight in kilograms: ");
scanf("%f",&weight);
if(weight<0.0)
{
break;
}
pounds=weight*2.2046;
printf("Oh,you weight %f pounds\n",pounds);
pounds=ceil(pounds*100-0.5);
pounds=pounds/100.0;
printf("approximately %.2f pounds\n",pounds);
pounds=0;
printf("\n");
}
printf("***End of program***\n");
return 0.0;
}
学校出的题目怎么这么繁琐。。
Ⅳ C语言编程的时候总是出错,而且无论什么程序所出的错误提示都是一样的,怎么解决
先把源程序复制,关掉环境,重开环境,再重新新建一个文件,把代码复制在里面
新建文件的存储位置重新放在一个地方,然后把文件名重新命名一个就行了(要和以前的那个名字不一样)
Ⅵ c语言初学者不知道代码哪错了
你操作了空指针
main()
{
btop,p;
top=(b)malloc(sizeof(structa));
top->next=NULL;
p=top;
intt=1;
while(t!=0)
{
scanf("%d",&t);
p->n=t;
//这里你应该要给p->next这个指针malloc空间出来
//否则下次循环的时候p的值为NULL,为空指针
//你再p->n这样对p解引用就会报错
p=p->next;
}
//这里要加一句把p的值置为NULL
p=top;
//这里的判断条件应该直接用p,当p为空指针的时候结束循环
while(p->n!=0)
{
printf("%d",p->n);
p=p->next;
}
}
Ⅶ C语言初学者,用codeblocks练习代码,可以不管敲什么都总是报错怎么回事。错误也看不懂
初步看是使用了全角符号造成的,疑似是括号
请务必在英文输入模式下输入代码
初学者括号往往会输错,是因为括号需要按住shift和9/0来组合,而按住shift这个操作不熟练的话,会变成单击shift,这会切换中英文输入状态
建议是将输入法切换到英文键盘,而不是中文键盘的英文状态,这俩是完全不同的
切换到英文键盘,shift不会切回中文。
Ⅷ 我今天刚学习了c语言,感觉是一点听不懂,我该怎么办呢
如果刚开始接触c语言,听不懂也正常,不要有畏惧的心理,有些小伙伴可能看到部分同学什么都会,自己就很气馁,因为这部分同学很可能接触编程比较早,即使小孩学走路也有一个过程,刚开始有走路欲望->学会站立,腿部有力量->尝试走路,不断练习->学会走路。所以不要慌。
学C语言与走路一样,刚开始一定要有学习的欲望,然后,再制定计划,不断练习,量变会引起质变,坚持下去就发现原来这么简单。
1、学习资料
书本推荐:《c primer plus》难得的好书。老谭的书可看可不看,但是这本蓝皮的c primer plus是我案头必备的参考书,后面还有完整的c99标准库,所以适合当个参考书。注意区分一下《c++ primer》和《c primer plus》
如果觉得这几本书还是有点难,那就先看《C语言程序设计》
有了经验后要去看看,例子很经典。后来进阶可以看看三剑客《c和指针》《c陷阱与缺陷》《c专家编程》
刚学C语言的话可以结合看下C语言编程经典100例;
编译器:VS,DevC++,VC++,CodeBlocks,C-Free,Turbo C。关于它们的特点网上介绍很多了,就不赘述了。讲真,入门和基础阶段你用哪个无所谓,还是选自己喜欢的,不过对于初学者我们推荐Dev C++。可能现在大学课堂用的还是VC++,刚入门自己习惯就行。
视频推荐:有同学曾经说过,视频这么好,上课就不用听讲了,这个是完全错误的,视频是课堂补充,上课还是一定要好好听讲的,视频可以查缺补漏,系统的学习一下。b站找
学习方法:
1、过:学习一门新的语言,第一步就是把它所涉及的基础知识大体过一点,不求深解,只求了解——第一遍:无需了解太过深入的理论,大体知道这门语言是什么样的,主要面向哪些场合,一些基本的语法格式是什么样的就可以了。
2、抄代码:刚开始写代码,没有多少人一上来就能立刻自己写一个很完善很强大的代码,甚至连基本的语法都会写错,这时候抄代码就很关键了,从书上抄,从例子里抄,边抄边想,边想边回忆语法。
3、模仿改:自己会抄写一些简单的代码,熟悉了一遍此语言的简单语法后,但还不太清楚怎样下手写一个完整的代码模块,所以这一步要仿写了,仿照给出的代码写一个属于自己的代码
4、勤调试:没有人能一下子写出完全正确的代码,自己试着写一些代码,通过不断调试来验证自己的一些想法,继续思考,再次验证,来回折腾。熟悉一些基本的调试工具以及调试方法。
5、看n遍:出错或遇到问题时,将代码从头看到尾,看了一遍又一遍,直到快全部记住时,总能找出问题原因,相信方法总会比问题多
6、练重复2-5步三遍以上,不解释。
7、创新拿出一个完全没有写过的代码,根据要求,一步步的写出来。如果写不出来,或者中间一堆错误,请参考第六步。
8、悟:主动找到写代码的感觉和成就感,并保持下去,世界上最难的语言就掌握了,将成为你软件生涯永远的工具。
Ⅸ 刚开始学C语言,烦死了!!写个代码就出错
一般情况下查不出来错误很大几率是因为符号的问题,就是汉语使用的全角符号和英文使用的半角符号搞混出错,因为编程语言是无法识别中文使用的全角符号的。
其次vc++编译出错后会告诉你哪个文件第几行出错的,错误就在那行找就行,英文写得很简单,大概看下就能懂。
最后建议你安装一个vc++编程助手,有这玩意小的错误在敲代码的时候就可以直接帮你指出来,很方便。
你的代码可能是符号有问题,自己检查下,我给你复写一遍代码:
#include <stdio.h>
void main()
{
int i,j,m,n;
i=8;
j=10;
m=++i;
n=j++;
printf("%d,%d,%d,%d\n",i,j,m,n);
}
Ⅹ c语言不知道如何学啊刚开始学根本找不到头脑,编那些程序根本不会,请介绍学的方法,谢谢了!
一开始就从C学编程是一种对学生非常粗暴的方式
作为一个过来人,先推荐你看《编码的奥秘》这个非常浅显而深入的讲解了计算机体系原理
而且趣味性非常强,可以当散文看的,网络文档上就有这个的电子版。
至于编程,建议从相对简单的语言培养兴趣,比如Scheme
麻省理工有套非常出名的Scheme教程HTDP , How to Design Programs(如何设计程序)
可以访问其网站有免费的在线电子版不过是E文的 (网站www.htdp.org)
人民邮电出版社也翻译过这本书,它采用Scheme语言教学,从很简单的程序开始,一步一步学
习。它并不专注于语言本身,而是教你如何编程,开始的写的程序可能会非常简单,简单到你都
想笑。随着课程深入,会慢慢变难,一定要扎实的循序而学,不要因为简单而跳过章节。
到后来你发现已经可以写出很复杂的东西,游戏、web服务器、网站后台等。
这时你倒回来学C什么的,轻松加愉快,因为你已经不拘于语言,你学到的是如何编程。
虽然我从事C\C++编程6年,但是当我看到这本HTDP并抱着兴趣的想法,学习完了它,
我真的觉得,如果当初我学编程的第一本书就是看的它,而且认真的学了,估计我要少走很多
弯路。C对初学者太不友好了,它让你被语法和一堆不熟悉的东西蒙住而不容易接触到编程的本
质,虽然我们以前就是从C学编程,也就那么过来了,但是其中的辛苦各人自知。