两个简单的C问题

来源:百度知道 编辑:UC知道 时间:2024/09/18 06:03:07
第一个
#include <stdio.h>
int main(void)
{
int a;
scanf("%d",&a);
printf("%d",++a);
getch();
}
我本来以为如果我按下2,它会显示3,结果是还显示2,然后我按回车,它又换行显示3.这是什么原因?

第二个
(c=getchar())!='\n' 。 这里最外面的一组括号是什么意思?

谢谢
第一个那个我用的是WIN-TC,是这个结果。 那在这里怎样才能让我按下2显示3?

第一个问题, 我也觉得很神奇,自己操作了一下才明白。。 当你用scanf的时候输入的东西是有回显(echo)的, 所以你按个2当然就显示个2, 直到你按回车才表示你输入完了, scanf才开始读出数据, 然后下面的才是你的计算结果,是3说明没问题。。

第二个问题。 在c语言里 = 和 !=都是运算符, 而 =的优先级比较低,所以如果没有那个括号, 编译器会理解成 c = ( getchar() != '\n') 。
就这个问题有两点建议:首先强烈建议你不要看这种代码,更不要写这种代码, 原则就是一个语句只做一件事。 这种代码风格的结果就是让程序充满bug又无法维护。 其次建议你在搞不清的时候宁可多写括号不要少写括号。也许你自己很清楚哪个运算符优先级高一些,但其他读程序的人未必清楚, 轻则在这里浪费时间琢磨先后次序,重则完全理解错误,误入歧途。

第二个(c=getchar())
是说明c=getchar()函数导进得值。
最外面得括号是c=getchar()后在和‘\n’比较.
第一个可能是你有的c是从右到左算的即++a变成了a++

我在TC和VC6.0是都试过按下2,它会显示3吧
第二个应该就是优先级的问题吧
!=的优先级高于=,如果没有括号,他会先先执行这个getchar()!='\n',这与你要达到的目的不同
看谭浩强老师的书说++这个东西,会因为编译器的不同而出现我们所不能预测的问题

我用TC2.0调试过了,第一个程序是正确的。
(c=getchar())与单独一个getchar()或c的意思是一样的,只不过c语言就这种规定。