2017-11-25 22 views
-1

好吧,基本上我所要做的就是將文本文件的所有數字都更改爲美元符號,我知道如何掃描特定字符,但我堅持要如何替換美元符號的特定字符。我不想使用fseek或任何庫命令,我該如何繼續,爲什麼我的代碼不工作?替換文件中的特定文本C

#include<stdio.h> 
main() 
{ 
FILE* fptr; 
char filename[50]; 
char string[100]; 
int i; 
printf("Enter the name of the file to be opened: "); 
scanf("%s",filename); 
fptr=fopen(filename,"w"); 
if(fptr==NULL) 
{ 
    printf("Error occurred, try again."); 
    return 0; 
} 
fgets(string,"%s",fptr); 
do 
{ 
    if(string[i]>='1' && string[i]<='9') 
    { 
     string[i]='$'; 
    } 
} 
while(i!=100); 
fclose(fptr); 
} 
+0

'與fgets(字符串,100,FPTR)' – coderredoc

+1

你明白了你不實際寫入任何更改回原來的文件,對不對? – dbush

+0

'int i;'是未初始化的。建議:使用for()-loop而不是'do {...} while();'。 – wildplasser

回答

0

基本上有乍一看兩種方法,第一種是使用FSEEK()和第二個完整閱讀該文件,並替換字符,您的標準,最後寫一個炮打響。您可以根據自己的需要選擇其中一種方法。對於大文件,你應該更喜歡前者和小文件,你可以選擇後者。

這裏是前者的一個示例代碼:

#include <stdio.h> 

int main() { 
    // Open the file 
    FILE *fptr = fopen("input.txt", "r+"); 
    if (!fptr) { 
     printf("Error occurred, try again."); 
     return -1; 
    } 
    int c; 
    // Iterate through all characters in a file 
    while ((c = getc(fptr)) != EOF) { 
     // Check if this current character is a digit? 
     if (c >= '0' && c <= '9') { 
      // Go one character back 
      if (fseek(fptr, -1, SEEK_CUR) != 0) { 
       fprintf(stderr, "Error while going one char back\n"); 
       return -1; 
      } 
      // Replace the character with a '$' 
      if (fputc('$', fptr) == EOF) { 
       fprintf(stderr, "Error while trying to replace\n"); 
       return -1; 
      } 
     } 
    } 
    // Flush the changes to the disk 
    if (fflush(fptr) != 0) { 
     fprintf(stderr, "Error while flushing to disk\n"); 
     return -1; 
    } 
    // Close the file 
    fclose(fptr); 
    return 0; 
}