鱼C论坛

 找回密码
 立即注册
查看: 2617|回复: 1

新手请教C问题

[复制链接]
发表于 2012-8-12 15:00:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
int main()
//冒泡排序
{
        int a[10],i;
        int j,k,temp;
        printf("请输入十个数:\n");
        for ( i=0;i<10;i++)
        {
                scanf("%d",a+i);
        }
//        int j,k,temp;为什么变量在这定义的话出错?E:\新建文件夹 (2)\12.8.12\冒泡排序.c(12) : error C2143: syntax error : missing ';' before 'type'
        for (k=0;k<9;k++)
        {
                i=0;
                for (j=1;j<10-k;j++)
                {
                        if (a>=a[j])
                        {
                                temp=a[j];
                                a=temp;
                                a[j]=a;
                                i=j;
                        }
                }
        }
        for (i=0;i<10;i++)
        {
                printf("%d<",a);
        }
        printf("\n");
        return 0;
       
}

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-8-12 15:20:48 | 显示全部楼层
真是菜了,这问题百度到了

#include <stdio.h>
int main()
{
char char1='A';
printf("大写字符=%c的ASCII码=%d\n",char1,char1);
char char2=char1+32;
printf("小写字符=%c的ASCII码=%d\n",char2,char2);
return 0;
}
把上述代码放到命名为test.c的文件中(VC 6.0调用C编译器),编译。出现编译错误:
d:/project/c++/test/1.c(12) : error C2143: syntax error : missing ';' before 'type'
d:/project/c++/test/1.c(14) : error C2065: 'char2' : undeclared identifier
这是因为在上述代码中char char2=char1+32;的定义放在了执行语句printf("大写字符=%c的ASCII码=%d/n",char1,char1);的后面导致的;
一旦把上述同样的语句放到了test.cpp文件中(VC 6.0调用C++编译器),编译没有问题,这是因为编译器认为上述代码是C++语法格式的;
在C++中没有严格要求变量定义一定要放在执行语句之前。如果在.c文件中执行上述代码的话,可以在编译器设置用C++编译!

在.c文件中(C)正确的代码为:
#include <stdio.h>
int main()
{
char char1='A';
char char2=char1+32;
printf("大写字符=%c的ASCII码=%d/n",char1,char1);
/*char char2=char1+32; */ /*在C中变量定义必须放在所有的执行语句之前!*/
printf("小写字符=%c的ASCII码=%d/n",char2,char2);
return 0;
}
这就是C标准的问题
C89规定,在任何执行语句之前,在块的开头声明所有局部变量。
在C99以及C++中则没有这个限制,即在首次使用之前,可在块的任何位置都可以声明变量。
另一方面,编译器不同也不同,gcc编译器有很多扩展的功能,可完美支持C99标准。
关于变量的定义:
以花括号{}给包围起来的代码段称为block,只要在block开始的地方定义变量就不会错;
该变量的作用域和生存期(除了static限定)只在该block里,且该变量可以屏蔽block外的变量;
譬如在block外已经有一个变量名为a = 1的int变量,在block里允许定义一个同名的变量int a = 2,但在block里试着用printf打印的话,会发现printf("%d", a)结果是2.这就叫做屏蔽外面的变量!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-28 19:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表