Я новичок в программировании, поэтому, пожалуйста, будь красивой.C - Печать определенной строки из текстового файла
В настоящее время я пытаюсь написать программу, которая открывает текстовый файл, читается двумя словами, поиск в текстовом файле подсчитывает, сколько раз появляются два слова, а затем, наконец, печатает первую строку, в которой появилось первое слово на.
До сих пор это то, что я сделал:
#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);
}
}
}
Последний цикл не работает должным образом. Он печатает \ n, но не печатает строку. Я действительно не знаю, почему он не работает. Все остальные части работают нормально.
Если у кого-то есть идеи о том, как разрешить это, я был бы очень признателен. Пожалуйста, имейте в виду, что я знаю только основные функции C, и я не полностью закончил эту программу (все равно нужно преобразовать введенные слова в нижний регистр).
Вы уверены, что хотите 'для (INT х = LineCount; х <= LineCount; х ++)'? – timrau
Вам необходимо отсканировать файл по строкам. Дублируйте первую строку. Затем отобразите количество слов и, наконец, выведите дубликат строки. –
'gets()' is bad, используйте 'fgets()' slways. :-) –