为什么c语言中明明已经定义了还会出现error C2065: 'k' : undeclared identifier?求解

#include <stdio.h>
void sort(int a[],int n);
int main(void)
{
int i, n;
int repeat, ri;
int a[10];

scanf("%d", &repeat);
for(ri = 1; ri <= repeat; ri++){
scanf("%d", &n);
for(i = 0; i < n; i++)
scanf("%d", &a[i]);
sort(a,n);
printf("After sorted: ");
for(i = 0; i < n; i++)
printf("%d ", a[i]);
printf("\n");
}
int sort(int a[],int n)
{int i,k;
for(i=0;i<n;i++){
if(a[i]>a[i+1]){
k=a[i];
a[i]=a[i+1];
a[i+1]=k;}}
return 0;}

你的主函数最后少了一个括号。。。我晕。。。还有创建函数与定义的函数的类型不同 一个是VOID 一个是INT的。。。。这是优点错误的 ~~嘿嘿

#include <stdio.h>
int sort(int a[],int n);
int main(void)
{
int i, n;
int repeat, ri;
int a[10];

scanf("%d", &repeat);
for(ri = 1; ri <= repeat; ri++){
scanf("%d", &n);
for(i = 0; i < n; i++)
scanf("%d", &a[i]);
sort(a,n);
printf("After sorted: ");
for(i = 0; i < n; i++)
printf("%d ", a[i]);
printf("\n");
}
}
int sort(int a[],int n)
{int i,k=0;
for(i=0;i<n;i++){
if(a[i]>a[i+1]){
k=a[i];
a[i]=a[i+1];
a[i+1]=k;}}
return 0;}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-06-06
我这边调试的时候没有出现你说的K变量没有声明的错误。。
只是有一个问题就是。你在声明sort()函数的时候声明的返回值是void类型的。但是你后面实现或定义的时候是int返回值类型的。。这样就有问题的。。
还有就是主函数里面的for循环里面差一个右大括号的。追问

你用的是什么编程软件?

追答

VS2010.本来就不会出现那个K未定义的声明错误的。你前面已经声明了。。

追问

其实那个k 是应该定义在函数定义中的for循环中的!如果像我上面那样就会是会出现的!不过谢谢你了!

追答

不管你在哪里面定义都是不会出现这个错误的。。你在FOR循环中定义是一样的道理的。。
而且C语言好像是不支持你说的那种方式的。。

追问

哎呀!其实和你这样也说不清楚!反正谢谢你 了!

第2个回答  2011-06-11
按照编译原理来说,C语言中定义的变量都会在对应的符号表中存储相应标记,如果有相同的变量定义,那么这个重复的变量就不能再申请符号表里的存储空间,此时编译器就会报错的。这也是考虑到程序的容易理解。个人的理解
相似回答