C 语言新手 , 练习代码求指导 . 用 if 用乱了 .

2014-07-29 22:55:07 +08:00
 GPU
https://gist.github.com/p0w3r-/e518ff71c6a9d68c3981

这是代码 .

搞来搞去 编译不出来 .并且看不懂编译出错后返回的英文.
6348 次点击
所在节点    程序员
81 条回复
tonyluj
2014-07-29 23:23:53 +08:00
BTW:看到LZ每行都有花括号,突然有Go的感觉
GPU
2014-07-29 23:25:09 +08:00
@tonyluj 我想先学习研究一下C 。然后再去玩玩Go
RHFS
2014-07-29 23:28:59 +08:00
90 < result >= 80

90 < result && result > 80 && result = 80
才对吧,然后别看谭浩强的书。
icylogic
2014-07-29 23:36:32 +08:00
@GPU

...目测没有. 既然用 linux, 那就做好一切自力更生, 并且初期花费一半以上的时间熟悉工具的思想准备, 否则穷温富麦.
GPU
2014-07-29 23:44:30 +08:00
@icylogic 我会慢慢习惯 linux的 GCC的. 谢了

@RHFS 我没有看过谭浩强的,也不知道他的书是什么样子 . 只是可能自己不知道从哪里冒出来的想法,然后这样子写了下去.
GPU
2014-07-29 23:46:28 +08:00
@Livid

https://gist.github.com/p0w3r-/e518ff71c6a9d68c3981

看上面我这个链接 , 用户ID 包括了 ” - " 这个符号会导致无法成功把代码发出来 ,算不算bug呢?
acros
2014-07-29 23:53:35 +08:00
想起我当年自学C++一个Hello World近十个error的年代,吓尿了···
zhujinliang
2014-07-30 00:01:49 +08:00
result < 90这个条件是没意义的,上面是result>= 90,不成立了,则进行else if条件的判断,已隐含此时值<90,同理后面的<80 <70
rentaro
2014-07-30 00:06:18 +08:00
return 0;
jetbillwin
2014-07-30 00:28:08 +08:00
我觉得要好好看看出错的信息,哪怕是英文的,配合着字典也能看懂的。现在的编译器都非常智能,基本上都能找到出错点,尤其是LLVM。所以,看懂编译器的出错信息非常有用。
GPU
2014-07-30 00:48:55 +08:00
@acros 怎么样能弄得十个error 出来 不解啊。
@rentaro 编辑器居然也没有报错哦。
@zhujinliang 谢谢提点 。
rentaro
2014-07-30 01:07:43 +08:00
@GPU 什么开发环境,gcc中return语句后不加分号一定是会报错的,最好贴一下编译的信息。
Ricepig
2014-07-30 01:14:36 +08:00
int main()
{
int result;

scanf("%d",&result);
int rank = 9 - result/10;
if(rank < 0) {
rank = 0;
}else if(rank > 4){
rank = 4;
}

printf("%c/n", 'A'+rank);
return 0
}

这样行吗?
jesse_luo
2014-07-30 01:16:03 +08:00
lz期末考应该已经过了吧……

另外else if里貌似有一半不用写
crab
2014-07-30 01:19:56 +08:00
@tjmao 谁都是从不懂到懂。你这么强,可以去weibo和袁哥试试。
tioover
2014-07-30 01:23:04 +08:00
最近在用模式匹配,简化这些代码非常爽
em70
2014-07-30 01:47:17 +08:00
编译错误看不懂不要紧,可以直接贴google搜索,解决方案马上就出来了,多几次就看懂了。

另外,程序员英语不需要多好,但至少有查字典阅读的程度
tjmao
2014-07-30 03:37:18 +08:00
@crab 对,谁都是从不懂到懂。如果我的回复中存在疏漏和错误,也请指出。比如你可以写:select/case还不如查表法快。我将接受这样的批评。

谢谢。
abscon
2014-07-30 06:22:42 +08:00
附言1里的代码,if语句中所有的&&后面的判断是否小于的部分都是多余的,可以删掉。

你的失误在于把if else看成一堆状态的并行的**罗列**,而不是一个串行的**过程**。比如说,当你来到第一个else if的时候,result一定是<90的,否则就掉进前面那个if分支了。

秀个当年我同学的经典错误的简化版:变更字符串里的字母A的大小写状态,a换成A,A换成a。他是这么写的--
if( ch == 'a' ) ch = 'A';
if( ch == 'A' ) ch = 'a';
bombless
2014-07-30 08:44:41 +08:00
一开始是这样的…照着书来看一下表达式是怎么构成的吧,初学的时候不要想当然。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/125160

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX