2016-03-18 77 views
1

TODO:如果.txt文件存在一定的詞,這個詞複製到另一個txt文件如果.txt文件存在一定的詞,這個詞複製到另一個txt文件

問題:它贏得了」在「from.txt」到「to.txt」中找到該單詞後再寫入該單詞。

錯誤:

這條線:while ((fscanf(ifp, "%s", line)) != EOF)

CODE:

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <conio.h> 

#define MAX_LINE 256 

void main() 
{ 
    FILE *ifp; 
    FILE *ofp; 
    char line[MAX_LINE]; 
    char word[MAX_LINE]; 
    if ((ifp = open("from.txt", "r")) == NULL) 
    { 
     printf("Can't open input file."); 
     exit(1); 
    } 
    if ((ofp = open("to.txt", "w")) == NULL) 
    { 
     printf("Can't open output file."); 
     exit(1); 
    } 
    printf("Enter your word: "); 
    gets(word); 
    while ((fscanf(ifp, "%s", line)) != EOF) 
    { 
     if (strcmp(line, word) == 0) 
     { 
      fputs(line, ofp); 
      break; 
     } 
    } 
    fclose(ifp); 
    fclose(ofp); 
    getch(); 
} 
+0

你的問題是什麼? – HappyCoding

+0

找到「to.txt」後就不會寫出該單詞。 –

+0

@ user3121023不用擔心gets/fgets,VS13完全適合正確使用。 (在旁註中,它沒有幫助) –

回答

1

問題:它在 「from.txt」 到 「to.txt」 發現後,它不會寫的字。

正如評論和其他答案指出,and for other reasonsopen()可能不適合寫入嚴格ANSI移植代碼的最佳選擇。

但這不是所述問題的原因。

函數strcmp(...)沒有做什麼需要。
在這一行:

if (strcmp(line, word) == 0) 

的一個字被與整個線相比。單個單詞永遠不會被識別。即使文件中的行出現只有一個單詞,空格,如空格,製表符或換行符(「」。\ n,\ t)會導致strcmp這兩個參數不相等。

strcmp(string1, string2)可能的返回值是:
正整數時字符串1比字符串2
零當字符串1是等於到STRING2
負整數時字符串1是小於字符串2

更大

函數strstr會更合適。更改STRCMP線使用的strstr

if (strstr(line, word)){... 

strstr(...)查找字符串中的子串的存在。而且,通過討論的其他更改,使您的代碼按照您所描述的進行操作。

+0

非常感謝ryyker。這非常有用! –

+0

@IlanAizelmanWS - 不客氣。 – ryyker

3

您使用的是錯誤的API打開文件。您使用的API - open - 適用於基於描述符的低級訪問。你會得到一個int值,並且ifpofp將不正確。

您必須使用基於流的API,稱爲fopen。它返回一個指向FILE結構,這反過來又可以傳遞給fscanf()

非常重要:編譯這個程序與所有的編譯器警告,並觀察輸出。我很確定你已經從編譯器獲得了一條警告消息的日誌。

+0

好吧,現在它說我無法打開文件。 –

+0

你沒有發表太多關於你編譯它的地方/方式。使用''fopen(「file.txt」,「r」)''它希望你有''file.txt''在你運行程序的同一個目錄中。否則,你必須指定文字路徑,例如:''/ path/to/file.txt''。 –

+0

寫了一個程序寫入「to123.txt」文件。它在目錄中創建了該文件,並且我在那裏複製了2個文件,現在該程序起作用。解決方案也是找到正確的目錄。問題解決了。 –

1
#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <conio.h> 

#define MAX_LINE 256 

void main() 
{ 
FILE *ifp; 
FILE *ofp; 
char line[MAX_LINE]; 
char word[MAX_LINE]; 
//**************************************************************** it's  fopen not open *********************************************************** 
if ((ifp = fopen("from.txt", "r")) == NULL) 
{ 
    printf("Can't open input file."); 
    exit(1); 
} 
if ((ofp = fopen("to.txt", "w")) == NULL) 
{ 
    printf("Can't open output file."); 
    exit(1); 
} 
printf("Enter your word: "); 
gets(word); 
while ((fscanf(ifp, "%s", line)) != EOF) 
{ 
    if (strcmp(line, word) == 0) 
    { 
     fputs(line, ofp); 
     break; 
    } 
} 
fclose(ifp); 
fclose(ofp); 
getch(); 
} 

其工作正常...

相關問題