我想简化一个txt文档,然后尝试了此代码:
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
// 1. Step: Open files
FILE *infile;
FILE *outfile;
char line[256];
infile = fopen("vcard.txt", "r");
outfile = fopen("records.txt", "w+");
if(infile == NULL || outfile == NULL){
cerr << "Unable to open files" << endl;
exit(EXIT_FAILURE);
}
// 2.Step: Read from the infile and write to the outfile if the line is necessary
/* Description:
if the line is "BEGIN:VCARD" or "VERSION:2.1" or "END:VCARD" don't write it in the outfile
*/
char word1[256] = "BEGIN:VCARD";
char word2[256] = "VERSION:2.1";
char word3[256] = "END:VCARD";
while(!feof(infile)){
fgets(line, 256, infile);
if(strcmp(line,word1)!=0 && strcmp(line,word2)!=0 && strcmp(line,word3)!=0){ // If the line is not equal to these three words
fprintf(outfile, "%s", line); // write that line to the file
}
}
// 3.Step: Close Files
fclose(infile);
fclose(outfile);
getch();
return 0;
}
不幸的是,尽管有ifile包含Word1,Word2和Word3百倍,但我仍然获得1或-1,作为Strcmp的返回值。
我应该尝试什么?
fgets
作为字符串的一部分返回newline字符。由于您要比较的字符串不包含newline,因此它们会被比较为不同。
由于您在C 中写作,因此您可能需要使用std::ifstream
和std::getline
读取文件。getline
返回的字符串将没有新线,作为额外的奖励,您无需指定限制行大小。
另一个(无关的)问题:使用while (!foef(file))
是错误的,并且可能导致最后一行被读取两次。相反,您应该循环直到fgets
返回零指针。