我是编程新手,所以请保持友好。
当前,我正在尝试编写一个程序来打开一个文本文件,读取两个单词,搜索该文本文件以计算两个单词出现的次数,然后最后打印出第一个单词出现的第一行。
到目前为止,这是我所做的:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
FILE *infile;
char inputWord1[100], inputWord2[100], filename[100], wordInText[100], line[500];
int i, count, strComp, word1Count, word2Count, wordLen, lineCount;
char c;
int main() {
printf("Enter the first word: ");
gets(inputWord1);
printf("Enter the second word: ");
gets(inputWord2);
printf("Enter the file name: ");
gets(filename);
infile = fopen(filename, "r");
if(infile == NULL) {
printf("Error");
exit(1);
}
word1Count = 0; word2Count = 0; lineCount = 1;
while(fscanf(infile, "%s", wordInText) != EOF) {
wordLen = strlen(wordInText);
for(i = 0; i < wordLen; i++) {
if(wordInText[i] >= 65 && wordInText[i] <= 90) {
wordInText[i] = wordInText[i] + 32;
}
}
for(c = getc(infile); c != EOF; c = getc(infile)) {
if(c == '\n') {
lineCount = lineCount + 1;
}
}
strComp = strcmp(wordInText, inputWord1);
if(strComp == 0) {
word1Count++;
if(word1Count == 1) {
for(int x = lineCount; x <= lineCount; x++) {
fgets(line, 500, infile);
printf("%s\n", line);
}
}
}
strComp = strcmp(wordInText, inputWord2);
if(strComp == 0) {
word2Count++;
}
}
printf("Word 1 appears %d times\n", word1Count);
printf("Word 2 appears %d times\n", word2Count);
}
因此,所有这一切都有效,除了:
strComp = strcmp(wordInText, inputWord1);
if(strComp == 0) {
word1Count++;
if(word1Count == 1) {
for(int x = lineCount; x <= lineCount; x++) {
fgets(line, 500, infile);
printf("%s\n", line);
}
}
}
最后一个for循环无法正常工作。它打印出\ n,但不打印该行。我真的不知道为什么它不起作用。所有其他部分都工作正常。
如果有人对如何解决这个问题有任何想法,我将不胜感激。请记住,我只知道基本的C函数,并且我还没有完全完成该程序(仍然需要将输入的单词转换为小写)。
应该替换gets以避免缓冲区溢出,我使用了一些define,当我们找到输入行是dup并在最后打印时。文件逐行读取,每一行逐字拆分。解析应进行更新,例如允许有多个空格,支持更多的单词分隔符等。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#define WORD_LEN_MAX 100
#define LINE_LEN_MAX 500
int main() {
FILE *infile;
char inputWord1[WORD_LEN_MAX], inputWord2[WORD_LEN_MAX];
char filename[WORD_LEN_MAX];
char wordInText[WORD_LEN_MAX], line[LINE_LEN_MAX];
char firsAppear[LINE_LEN_MAX];
int word1Count, word2Count, lineCount, i;
printf("Enter the first word: ");
gets(inputWord1);
printf("Enter the second word: ");
gets(inputWord2);
printf("Enter the file name: ");
gets(filename);
infile = fopen(filename, "r");
if(infile == NULL) {
printf("Error cannot open %s", filename);
exit(1);
}
word1Count = 0; word2Count = 0; lineCount = 1;
while(fgets(line, sizeof(line), infile) != NULL) {
char *p = line;
lineCount++;
while (*p != '\0' && *p != '\n') {
i = 0;
while (*p != ' ' && *p != '\0' && *p != '\n') {
wordInText[i++] = tolower(*p++);
}
if (*p == ' ') {
p++;
}
wordInText[i] = '\0';
if(!strcmp(wordInText, inputWord1)) {
word1Count++;
if(word1Count == 1) {
strncpy(firsAppear, line, sizeof(firsAppear));
}
}
if(!strcmp(wordInText, inputWord2)) {
word2Count++;
}
}
}
printf("Word 1 appears %d times\n", word1Count);
printf("Word 2 appears %d times\n", word2Count);
printf("%s", firsAppear);
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句