c语言课程设计第二次查找出现死循环
											
	
		
			 001.rar
				(1.8 MB)
001.rar
				(1.8 MB)
				
				
			 程序代码:
程序代码:这是源代码
#include <io.h>
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
BOOL SetConsoleColor(WORD wAttributes)  //获取console窗口句柄
{ 
    HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
    if (hConsole == INVALID_HANDLE_VALUE)
        return FALSE;
    return SetConsoleTextAttribute(hConsole, wAttributes); 
} 
int count=0,C[20]={0},len=0;;
int A[100]={0},B[50]={0};
char string[10];
void printFile(FILE *fp);
void print(FILE *fp,int len,int shift);
void write_Section(FILE *fp,FILE *fp1,int len,int shift);
void write_All(FILE *fp,FILE *fp1);
void print_Change(char *string);
void menu();
void view();
void statistic();
void find(int *len);
void change();
int main()
{
    menu();
    return 0;
}
void menu()//菜单
{
    int a=211,i,j,s;
    system("color 0A");
    s=(a-1)/2;
    for(i=0;i<a;i++){
        for(j=0;j<abs(s-i);j++){
            printf(" ");
        }
        for(j=0;j<abs(a-2*abs(s-i));j++){
            printf("*");
        }
        putchar('\n');
    }
    system("cls");
    SetConsoleColor(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY);
    printf("\n\n\n    #                WELCOME TO THE SYSTEM               #\n");
    printf("    ------------------------------------------------------\n\n");
    SetConsoleColor(FOREGROUND_RED | FOREGROUND_INTENSITY);printf("    # 0 # --> ");SetConsoleColor(FOREGROUND_GREEN | FOREGROUND_INTENSITY);printf("View the file\n");
    SetConsoleColor(FOREGROUND_RED | FOREGROUND_INTENSITY);printf("    # 1 # --> ");SetConsoleColor(FOREGROUND_GREEN | FOREGROUND_INTENSITY);printf("Count characters\n");
    SetConsoleColor(FOREGROUND_RED | FOREGROUND_INTENSITY);printf("    # 2 # --> ");SetConsoleColor(FOREGROUND_GREEN | FOREGROUND_INTENSITY);printf("Find & change some characters\n\n");
    SetConsoleColor(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY);
    printf("    ******************************************************\n");
    printf("                                    any other keys to exit\n\n");
    SetConsoleColor(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY);
    scanf("%d",&a);
    if(a<0 || a>2){exit(0);}
    system("cls");
    switch(a){
    case 0:view();menu();
    case 1:statistic();menu();
    case 2:find(&len);change();menu();
    default:exit(0);
    }
}
void view()//预览原有文件
{
    FILE *fp;
    if((fp=fopen("data.txt","r"))==NULL){
        printf("Cannot open the file.\n");
        exit(1);
    }
    printFile(fp);
    fclose(fp);
}
void statistic()//统计
{
    FILE *fp;
    char ch;
    int a[26]={0},i,k=0;
    if((fp=fopen("data.txt","r"))==NULL){
        printf("Cannot open the file.\n");
        exit(1);
    }
    SetConsoleColor(FOREGROUND_GREEN | FOREGROUND_INTENSITY);
    printf("原文为:\n");
    SetConsoleColor(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
    while(!feof(fp)){
        ch=fgetc(fp);
        printf("%c",ch);
        if(ch>='A'&&ch<='Z'){
            i=ch-65;
            a[i]=a[i]+1;
            k++;
        }
        if(ch>='a'&&ch<='z'){
            i=ch-97;
            a[i]=a[i]+1;
            k++;
        }
    }
    SetConsoleColor(FOREGROUND_RED | FOREGROUND_INTENSITY);
    printf("\n\n一共有%d个字母.\n",k);
    printf("\n字母\t出现次数\n");
    for(i=0;i<26;i++)
        printf("%c(%c)\t%d\n",65+i,97+i,a[i]);
    fclose(fp);
    SetConsoleColor(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
}
void find(int *len)//查找字符串
{
    FILE *fp;
    char ch;
    int i=0,n=0,cor=0;
    if((fp=fopen("data.txt","r"))==NULL){
        SetConsoleColor(FOREGROUND_RED | FOREGROUND_INTENSITY);
        printf("Cannot open the file.\n");
        exit(1);
    }
    SetConsoleColor(FOREGROUND_GREEN | FOREGROUND_INTENSITY);
    printf("Input what do you want to find:\n");
    SetConsoleColor(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
    scanf("%s",string);
    *len=(int)strlen(string);
    while(!feof(fp)){
        for(i=0;i<*len;i++){
            ch=fgetc(fp);n++;
            if(ch=='\n'){cor++;}
            if(ch!=string[i]){break;}
        }
        if(i==*len){A[count]=n+cor-*len;count++;}
    }
    if(count!=0){printf("%d matched.\n",count);}
    else{SetConsoleColor(FOREGROUND_RED | FOREGROUND_INTENSITY);printf("No match find.\n");
    SetConsoleColor(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);exit(1);}
    rewind(fp);
    putchar(10);
    for(i=0;i<count;i++){
        print(fp,*len,A[i]);
        print_Change(string);
    }
    printFile(fp);
    putchar(10);
    fclose(fp);
}
void change()//字符串替换
{
    FILE *fp,*fp1;
    char string[10];
    int i=0,n=0;
    SetConsoleColor(FOREGROUND_GREEN | FOREGROUND_INTENSITY);
    printf("which do you want to change(to %d):\n",count);
    SetConsoleColor(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
    do{
        scanf("%d",&C[i++]);
    }while(getchar()!='\n');n=i;
    if(C[0]==0){SetConsoleColor(FOREGROUND_RED | FOREGROUND_INTENSITY);printf("Nothing will be changed.\n");
    SetConsoleColor(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);exit(1);}
    SetConsoleColor(FOREGROUND_GREEN | FOREGROUND_INTENSITY);
    printf("What do you want change it into:\n");
    SetConsoleColor(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
    scanf("%s",string);
    if((fp1=fopen("data.txt","r"))==NULL){
        SetConsoleColor(FOREGROUND_RED | FOREGROUND_INTENSITY);
        printf("Cannot open the source file.\n");
        exit(0);
    }   
    if((fp=fopen("data0.txt","w"))==NULL){
        SetConsoleColor(FOREGROUND_RED | FOREGROUND_INTENSITY);
        printf("Cannot write in the file.\n");
        exit(0);
    }
    for(i=0;i<n;i++){
        write_Section(fp,fp1,len,A[C[i]-1]);
        fputs(string,fp);
    }
    write_All(fp,fp1);
    fclose(fp);
    fclose(fp1);
    if(!access("data.bak",0)){remove("data.bak");}
    rename("data.txt","data.bak");
    rename("data0.txt","data.txt");
    SetConsoleColor(FOREGROUND_RED | FOREGROUND_INTENSITY);
    printf("Change & Save successfully\n");
    SetConsoleColor(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
}
void printFile(FILE *fp)//输出全文
{
    char ch;
    ch=fgetc(fp);
    while(!feof(fp)){putchar(ch);ch=fgetc(fp);}
}
void print(FILE *fp,int len,int shift)//输出文章到shift位置
{
    while(ftell(fp)!=shift){putchar(fgetc(fp));}
    fseek(fp,len,SEEK_CUR);
}
void write_Section(FILE *fp,FILE *fp1,int len,int shift)//写入文件到shift位置
{
    while(ftell(fp1)!=shift){
        fputc(fgetc(fp1),fp);
    }
    fseek(fp1,len,SEEK_CUR);
}
void write_All(FILE *fp,FILE *fp1)//写入到末尾
{
    char ch;
    ch=fgetc(fp1);
    while(!feof(fp1)){
        fputc(ch,fp);
        ch=fgetc(fp1);
    }
}
void print_Change(char *string)//输出查找到的字符
{
    SetConsoleColor(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY);
    printf("%s",string);
    SetConsoleColor(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
}										
					
	 程序代码:
程序代码:#include <io.h>
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <conio.h>
BOOL SetConsoleColor(WORD wAttributes)  //获取console窗口句柄
{ 
    HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
    if (hConsole == INVALID_HANDLE_VALUE)
        return FALSE;
    return SetConsoleTextAttribute(hConsole, wAttributes); 
} 
int count=0,C[20]={0},len=0;;
int A[100]={0},B[50]={0};
char string[10];
void printFile(FILE *fp);
void print(FILE *fp,int len,int shift);
void write_Section(FILE *fp,FILE *fp1,int len,int shift);
void write_All(FILE *fp,FILE *fp1);
void print_Change(char *string);
void menu();
void view();
void statistic();
void find(int *len);
void change();
int main()
{
    menu();
    return 0;
}
void menu()//菜单
{
    int a=211,i,j,s;
    system("color 0A");
    s=(a-1)/2;
    for(i=0;i<a;i++){
        for(j=0;j<abs(s-i);j++){
            printf(" ");
        }
        for(j=0;j<abs(a-2*abs(s-i));j++){
            printf("*");
        }
        putchar('\n');
    }
    system("cls");
    SetConsoleColor(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY);
    printf("\n\n\n    #                WELCOME TO THE SYSTEM               #\n");
    printf("    ------------------------------------------------------\n\n");
    SetConsoleColor(FOREGROUND_RED | FOREGROUND_INTENSITY);printf("    # 0 # --> ");SetConsoleColor(FOREGROUND_GREEN | FOREGROUND_INTENSITY);printf("View the file\n");
    SetConsoleColor(FOREGROUND_RED | FOREGROUND_INTENSITY);printf("    # 1 # --> ");SetConsoleColor(FOREGROUND_GREEN | FOREGROUND_INTENSITY);printf("Count characters\n");
    SetConsoleColor(FOREGROUND_RED | FOREGROUND_INTENSITY);printf("    # 2 # --> ");SetConsoleColor(FOREGROUND_GREEN | FOREGROUND_INTENSITY);printf("Find & change some characters\n\n");
    SetConsoleColor(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY);
    printf("    ******************************************************\n");
    printf("                                    any other keys to exit\n\n");
    SetConsoleColor(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY);
    scanf("%d",&a);
    if(a<0 || a>2){exit(0);}
    system("cls");
    switch(a){
    case 0:view();menu();break;
    case 1:statistic();menu();break;
    case 2:find(&len);change();menu();break;
    default:exit(0);
    }
}
void view()//预览原有文件
{
    FILE *fp;
    if((fp=fopen("data.txt","r"))==NULL){
        printf("Cannot open the file.\n");
        exit(1);
    }
    printFile(fp);
    fclose(fp);
}
void statistic()//统计
{
    FILE *fp;
    char ch;
    int a[26]={0},i,k=0;
    if((fp=fopen("data.txt","r"))==NULL){
        printf("Cannot open the file.\n");
        exit(1);
    }
    SetConsoleColor(FOREGROUND_GREEN | FOREGROUND_INTENSITY);
    printf("原文为:\n");
    SetConsoleColor(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
    while(!feof(fp)){
        ch=fgetc(fp);
        printf("%c",ch);
        if(ch>='A'&&ch<='Z'){
            i=ch-65;
            a[i]=a[i]+1;
            k++;
        }
        if(ch>='a'&&ch<='z'){
            i=ch-97;
            a[i]=a[i]+1;
            k++;
        }
    }
    SetConsoleColor(FOREGROUND_RED | FOREGROUND_INTENSITY);
    printf("\n\n一共有%d个字母.\n",k);
    printf("\n字母\t出现次数\n");
    for(i=0;i<26;i++)
        printf("%c(%c)\t%d\n",65+i,97+i,a[i]);
    fclose(fp);
    SetConsoleColor(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
    getch();
}
void find(int *len)//查找字符串
{
    FILE *fp;
    char ch;
    int i=0,n=0,cor=0;
    if((fp=fopen("data.txt","r"))==NULL){
        SetConsoleColor(FOREGROUND_RED | FOREGROUND_INTENSITY);
        printf("Cannot open the file.\n");
        exit(1);
    }
    SetConsoleColor(FOREGROUND_GREEN | FOREGROUND_INTENSITY);
    printf("Input what do you want to find:\n");
    SetConsoleColor(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
    scanf("%s",string);
    *len=(int)strlen(string);
    while(!feof(fp)){
        for(i=0;i<*len;i++){
            ch=fgetc(fp);n++;
            if(ch=='\n'){cor++;}
            if(ch!=string[i]){break;}
        }
        if(i==*len){A[count]=n+cor-*len;count++;}
    }
    if(count!=0){printf("%d matched.\n",count);}
    else{SetConsoleColor(FOREGROUND_RED | FOREGROUND_INTENSITY);printf("No match find.\n");
    SetConsoleColor(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);exit(1);}
    rewind(fp);
    putchar(10);
    for(i=0;i<count;i++){
        print(fp,*len,A[i]);
        print_Change(string);
    }
    printFile(fp);
    putchar(10);
    fclose(fp);
}
void change()//字符串替换
{
    FILE *fp,*fp1;
    char string[10];
    int i=0,n=0;
    SetConsoleColor(FOREGROUND_GREEN | FOREGROUND_INTENSITY);
    printf("which do you want to change(to %d):\n",count);
    SetConsoleColor(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
    do{
        scanf("%d",&C[i++]);
    }while(getchar()!='\n');n=i;
    if(C[0]==0){SetConsoleColor(FOREGROUND_RED | FOREGROUND_INTENSITY);printf("Nothing will be changed.\n");
    SetConsoleColor(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);exit(1);}
    SetConsoleColor(FOREGROUND_GREEN | FOREGROUND_INTENSITY);
    printf("What do you want change it into:\n");
    SetConsoleColor(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
    scanf("%s",string);
    if((fp1=fopen("data.txt","r"))==NULL){
        SetConsoleColor(FOREGROUND_RED | FOREGROUND_INTENSITY);
        printf("Cannot open the source file.\n");
        exit(0);
    }   
    if((fp=fopen("data0.txt","w"))==NULL){
        SetConsoleColor(FOREGROUND_RED | FOREGROUND_INTENSITY);
        printf("Cannot write in the file.\n");
        exit(0);
    }
    for(i=0;i<n;i++){
        write_Section(fp,fp1,len,A[C[i]-1]);
        fputs(string,fp);
    }
    write_All(fp,fp1);
    fclose(fp);
    fclose(fp1);
    if(!access("data.bak",0)){remove("data.bak");}
    rename("data.txt","data.bak");
    rename("data0.txt","data.txt");
    SetConsoleColor(FOREGROUND_RED | FOREGROUND_INTENSITY);
    printf("Change & Save successfully\n");
    SetConsoleColor(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE); 
    getch();
}
void printFile(FILE *fp)//输出全文
{
    char ch;
    ch=fgetc(fp);
    while(!feof(fp)){putchar(ch);ch=fgetc(fp);}
    getch();
}
void print(FILE *fp,int len,int shift)//输出文章到shift位置
{
    while(ftell(fp)!=shift){putchar(fgetc(fp));}
    fseek(fp,len,SEEK_CUR);
}
void write_Section(FILE *fp,FILE *fp1,int len,int shift)//写入文件到shift位置
{
    while(ftell(fp1)!=shift){
        fputc(fgetc(fp1),fp);
    }
    fseek(fp1,len,SEEK_CUR);
}
void write_All(FILE *fp,FILE *fp1)//写入到末尾
{
    char ch;
    ch=fgetc(fp1);
    while(!feof(fp1)){
        fputc(ch,fp);
        ch=fgetc(fp1);
    }
}
void print_Change(char *string)//输出查找到的字符
{
    SetConsoleColor(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY);
    printf("%s",string);
    SetConsoleColor(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
}										
					
	