本文目錄一覽:
- 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 重新命名就行了.
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/197552.html