本文目录一览:
- 1、C语言,关于局部变量重名的问题。
- 2、用C语言批量更改文件名
- 3、关于c语言查询账号重名的一道题
- 4、c语言中局部变量可以同名么?
- 5、c语言如何一次改变多个相同的参量名字
- 6、如何用c语言进行文件的批量重命名
C语言,关于局部变量重名的问题。
对于这道题你可以由外向内这样分。
单个文件中分为3个级别的空间:
函数外一个空间:全局变量,具有静态存储,从定义出到这个文件结尾范围的函数可以使用
函数内:自动变量,离开函数就释放
复合体(大括号内):自动变量,离开大括号就自动释放
说明:大致上就是这3部分,内和外有同名的,内将屏蔽外部变量。但是在同一级上的同名将导致出现多次定义的错误
多个文件涉及:只能有一个定义的外部链接
(c++的话还有类和名称空间)
你的第一个例子2个x的定义都是在main函数内的同一级上,重复定义。
第二个例子int x=3只能在大括号中生存,而且屏蔽了x=1的那个定义。
用C语言批量更改文件名
#include stdio.h
#include sys/types.h
#include sys/stat.h
#include unistd.h
#include dirent.h
#include string.h
#include iconv.h
#include errno.h
/*int to_iconv(char *in,size_t in_bytes,char *out,size_t out_bytes,
const char *from,const char *to)*/
int to_iconv(char *in,char *out,size_t out_bytes,const char *from,const char *to)
{
iconv_t cd;
size_t in_bytes=strlen(in);
//size_t out_bytes;
if((cd=iconv_open(to,from)) == (iconv_t)-1)
{
perror("iconv_open");
return -1;
}
if(iconv(cd,in,in_bytes,out,out_bytes) == -1)
{
perror("iconv");
return -1;
}
iconv_close(cd);
return 0;
}
void read_and_iconv(char *path,const char *from,const char *to)
{
DIR *dirp;
struct dirent *dir;
struct stat buf;
char temp[512]; //用于保存转换后的文件名称
if((dirp=opendir(path)) == NULL) //读取文件夹
{
perror("opendir");
return;
}
chdir(path); //进入到该文件夹内部
while(dir=readdir(dirp)) //读取该文件夹下所有文件
{
if((strcmp(dir-d_name,".") == 0) || (strcmp(dir-d_name,"..") == 0))
//过滤掉.以及..文件夹,不然会死循环的
continue;
bzero(temp,sizeof(temp));
to_iconv(dir-d_name,temp,sizeof(temp),from,to); //进行编码转换
rename(dir-d_name,temp); //进行重命名
printf("rename %s to %s\n",dir-d_name,temp);
stat(temp,buf);
if(S_ISDIR(buf.st_mode)) //判断当前读取的文件是否为文件夹
{
read_and_iconv(temp,from,to); //如果是则递归处理
chdir(".."); //处理完成后一定要记得返回上一层目录哦,不然其它文件就无法处理了
}
}
closedir(dirp);
}
int main(int argc,char **argv)
{
read_and_iconv(argv[1],argv[2],argv[3]);
/*第一个参数是要转换的文件夹所在的文件夹名称
*第二个参数是文件名称所使用的编码(这里为GBK)
*第三个参数是要转换成何种编码(这里为UTF-8)
*/
return 0;
}
关于c语言查询账号重名的一道题
#includestdio.h
#includestdlib.h
#includestring.h
int main()
{
char a[50];
char b[10][10] = { { "Alice" }, { "Bob" }, { "Lucky" }, { "Kitty" }, { "Tim" }, { "Lucy" }, { "Jim" }, { "Helena" } };
int c[1000], x, y, z, i, j;
while (1){
scanf("%s", a);
if (!strcmp(a, "END"))
break;
y = 0;
for (i = 0; i 10; i++)
{
z = strcmp(a, b[i]);
if (z == 0)
y = 1;
}
if (y == 1)
printf("NO");
else
printf("Yes");
printf("\n");
}
system("pause");
return 0;
}
c语言中局部变量可以同名么?
在C语言中,相同作用域范围的局部变量不可以同名。所以,在不同作用域下,可以出现局部变量同名的情况。
1 在不同函数中。
函数不同,局部变量完全无关,自然可以使用相同的名字。
2 在同一函数中,但作用域不同。
局部变量的作用域是定义位置,到所在大括号结束。
所以只要两个局部变量属于不同的大括号中,就可以同名。
比如
void func()
{
int a;
while(1)
{
int a;
}
for(;;)
{
int a;
}
}
这里面,第一个a的作用域包含了第二个和第三个,而后两个之间作用域不相关。三个a分别属于三个不同的大括号,可以同名。
c语言如何一次改变多个相同的参量名字
你说的这些是C++的函数重载,C++是可以的,但C语言不支持函数重载
比如:
void fun(int n) 与int fun(int n)就是名称相同,返回类型不同,参数相同
void fun(int n) 与int fun(int n,int s)就是名称相同,返回类型不同,参数类型相同个数不同
int fun(int n) 与int fun(int n,int s) 名称相同,返回类型相同,参数类型相同个数不同
所以这些在用C语言编程时都会报错,就是不行
如何用c语言进行文件的批量重命名
这个简易的 按照你的方法改名的程序
在UNIX下测试可用
如果想在windows下用的话 可以用dev c++编译
#include stdio.h
#include unistd.h
#include dirent.h
int main(int argc, char **argv)
{
DIR *dirp;
struct dirent *dirt;
char dir_name[100];
int file_count=1; //file_count为计数.
if (argc != 2){
printf("argument miss\n");
exit(1);
}
if ((dirp = opendir(argv[1])) ==NULL){
printf ("open dir %s failed\n",argv[1]);
exit(1);
}
chdir(argv[1]);
while ( (dirt = readdir(dirp)) != NULL){
if ((strcmp(dirt-d_name,"..") !=0) (strcmp(dirt-d_name,".")!=0)){
memset(dir_name, 0, sizeof(dir_name));
strcpy(dir_name, dirt-d_name);
sprintf(dir_name + strlen(dirt-d_name), "_%d", file_count++);
if (rename(dirt-d_name, dir_name) 0){ //dir_name 为新的命名
printf("rename failed\n");
exit(1);
}
}
}
return 0;
}
原理挺简单 你输入一个文件夹作为参数 然后程序就打开这个文件夹遍历这个文件夹里的文件,把这个文件的名字取出来后面加上 "_计数" 用rename 重新命名就行了.