论坛: 编程破解 标题: 兄弟姐妹妹~帮我看看那里错了~ 复制本贴地址    
作者: TGV_Mic [tgv]       登录
│#include <math.h>
│main()
│{
│int a,b=50,c;
│scanf("%d",&a);
│if (a<=b) c=80;
│else (a>b) c=90;
│printf("c=%d\t",c);
│}

怎么老说我的b没有定义哪? 你能看出来我那里错了吗?

地主 发表时间: 04-10-06 11:18

回复: TomyChen [quest]   版主   登录
在C语言中应该严格遵守,“先定义,后赋值”这个定律。
int a,b=50,c;
你赋值后,编译器认为你的声明过程完了,而后你又来一个 c所以...,但有些编译器是不会报错的,例如LCC。
改成
int a ,b ,c
b = 50
....

B1层 发表时间: 04-10-06 11:27

回复: TecZm [teczm]   版主   登录
如果这样写:行不?
int a,c,b=50;

若还有d=60

可否写成 int a,c,b=50,d=60  还是应该写成
int a,c,b,d;
b=50,d=60;


B2层 发表时间: 04-10-06 11:48

回复: TGV_Mic [tgv]      登录
这就奇怪了~

谭浩强的c程序设计第二版中53页说“c允许再定义变量的同时使变量初始化”

那看我上面的代码,我在定义b是整形的同时也作了初始化呀~

B3层 发表时间: 04-10-06 11:51

回复: TGV_Mic [tgv]      登录
int a=3;
相当于:
int a;
a=3;



如果对几个变量赋予初值3,应该写成
int a=3,b=3,c=3;

[此贴被 TGV_Mic(tgv) 在 10月06日11时55分 编辑过]

B4层 发表时间: 04-10-06 11:52

回复: TecZm [teczm]   版主   登录
TomyChen [quest]
  --------------------------------------
  你赋值后,编译器认为你的声明过程完了...
  --------------------------------------

int a=30,b=40,c=60;
这样的赋值应该也是可以的吧。

B5层 发表时间: 04-10-06 12:15

回复: yuanrulai [yuanrulai]   论坛用户   登录
#include <math.h>
main()
{
int a,b=50,c;
scanf("%d",&a);
if (a<=b) c=80;
else (a>b) c=90;  /////////////////////////这个地方(a>b)是多余的
printf("c=%d\t",c);
}

我用的是windows xp +win-tc
将上面的修改之后,结果出来了。
有的时候编译器的出错信息并不是真正的出错的原因
一般编译不能通过主要是语法不够熟练,


[此贴被 排山倒海(yuanrulai) 在 10月06日15时34分 编辑过]

B6层 发表时间: 04-10-06 15:14

回复: TomyChen [quest]   版主   登录
挑我语病,小心我咬你
一般而言在

int a,b,c;这样是一个声明过程
int a,b=50,c;//b=50这不是初始化,而被编译器认为是一个赋值过程了(我是这么认为的)
就像

代码:

void main()
{
  int a;
  int b = 50;
  int c;
  printf("%d\n",b);
  //something
}


像上述代码是无法通过编译的。
而老谭所说的“C允许在定义变量的同时使变量初始化”“赋值过程”应该还是有所区别吧,我是这么理解的。

B7层 发表时间: 04-10-06 15:18

回复: TGV_Mic [tgv]      登录
谢谢楼上各位指点啦~
排山倒海你说的我明白啦~ 对于那种非此即彼的问题不需要重复限定,else的意思就是>50呀~


B8层 发表时间: 04-10-06 18:05

回复: authen [authen]   论坛用户   登录
TomyChen:
    int a,b,c=50是变量初始化
若拆开成
    int a,b;
    int c=50; //这句应该算赋值过程吧

两者没什么不同吧。


btw:有空来西安请你咬肉夹馍

B9层 发表时间: 04-10-08 08:16

回复: apollomz [apollomz]   论坛用户   登录
#include <math.h>
main()
{
int a,b=50,c;
scanf("%d",&a);
if (a<=b) c=80;
else c=90;
printf("c=%d\t",c);
}
你的判断上出了问题。注意看ELSE后面

B10层 发表时间: 04-10-08 15:52

回复: TGV_Mic [tgv]      登录
西安的兄弟们好呀!我也是西安的!


再给你们出道题


#include <math.h>
main()
{
int a,b,c;
scanf("%d,%d",a,b);
  if (a>=100&&b>=100) printf("big");
  else {c=a*b};printf("%d",c);
}


上面的代码我想实现的是:计算两个数相乘,输出结果 ,但一定要是两个100以下的数,否则输出超出范围 ,我写的代码有问题,你来改改吧~!   



西安的兄弟到底有多少啊~来签个名吧 !


[此贴被 TGV_Mic(tgv) 在 10月08日21时28分 编辑过]

B11层 发表时间: 04-10-08 21:27

回复: TGV_Mic [tgv]      登录
学c一个月了~感觉c挺好的 ~ 其实是我喜欢那种感觉,我的问题一般都很幼稚 ,千万别笑

B12层 发表时间: 04-10-08 21:30

回复: TomyChen [quest]   版主   登录
RE:野猪
有个笔误,明天再跟你说,太晚了,明天还要上班

楼 主的
代码:

原形
#include <math.h>
main()
{
int a,b,c;
scanf("%d,%d",a,b);//取址符&哪去了?
  if (a>=100&&b>=100) printf("big");//条件应该是 '或'(||)不是'与'(&&)前者满足其中任何一个条件,后者要求两者都要满足
  else {c=a*b};//分号应该在语句结束,而不是在{}结束处
  printf("%d",c););//这个问题最压重,如果a或b>=100程序并没有退出,走到这了。
}

修改版:
void main()
{
int a,b,c;
scanf("%d %d",&a,&b);
if (a>=100||b>=100)
{
printf("big");
return;
}
else
{c=a*b;}
printf("%d",c);
}


短短几行代码,几乎行行出错,不知道真为初学,还是故意这样子:(
而且代码可读性很低(如果是初学的话)

if (a>=100&&b>=100) printf("big");
else {c=a*b};
这样的格式十分不好,即很容易造成else {c=a*b};(类似这个)的错误
当然,你如果是老鸟又另当别论,呵呵,回完,关机睡觉...明天接着讨论第一个问题(本来我写了一半的,但太累了,眼花,写不下去-_-!!!

B13层 发表时间: 04-10-09 01:18

回复: 286 [unique]   版主   登录
强烈支持 [color=blue]唐米陈
他说的也正是我想要说的,作为初学者,代码可读性强与否将影响你以后的编程,所以强烈建议大家学习的时候不要去随意写可读性极差的程序,另外建议初学者学会写注释,尽管你的程序你都能看懂。[/color]

B14层 发表时间: 04-10-09 08:46

回复: lida1818 [lida1818]   论坛用户   登录
void main()
{  int a;
  int b = 50;
  int c;
  printf("%d\n",b);
}

如上程序在语法并无问题,通不过是你的编译器“要求”太严了吧

B15层 发表时间: 04-10-09 09:15

回复: TecZm [teczm]   版主   登录
收到!收藏!
记得N年前英语老师说的:"句子越简单,出错的可能越少"。

btw: 野猪[authen]==TecZm



B16层 发表时间: 04-10-09 09:55

回复: yingzike [yingzike]   论坛用户   登录
谁能不犯错误呀
关键呢要知错就改呢
呵呵
=================================================================

if (a>=100&&b>=100) printf("big");
else {c=a*b};
这样的格式十分不好,即很容易造成else {c=a*b};(类似这个)的错误
=================================================================

要改这个错误嘛,初学者(当然我也是了
else {c=a*b};  --> else { c=a*b;};;;;
记得多加分号,多加可以(不要加N个,不好玩),少加就不行了



B17层 发表时间: 04-10-09 11:31

回复: TGV_Mic [tgv]      登录
明白了!
我在网吧看到论坛有个程序,突然自己兴趣来了,就变化了一下思路,想用一用自己学的知识,所以写的仓促了许多,小问题也就很多,各位见笑~,

我突然有种感觉,c程序是很严谨的一门技术,容不得自己半点想入非非,否则一定学得一塌糊涂,c语言确实令我着谜,所以,我要一丝不苟啦~



总结以下,一 :写代码要注意格式,可读性要强,让别人和自己都要看懂。
          二 :要学会注释,帮助自己理清思路。
          三 :编程时千万不要自我佩服,以免手指飘飘,错误多多。

B18层 发表时间: 04-10-10 19:30

论坛: 编程破解

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号