Я хочу написать программу на C, которая будет принимать входной файл .txt, читать из него и применять функции или отображать текст в stdout или записывать его в выходной файл. Ради простоты я написал это, чтобы просто показать слова.
Полный код:
#include <stdio.h>
#include <stdlib.h>
#include <getopt.h>
int main(int argc, char **argv){
int c;
int output = 0;
FILE *infile;
while((c = getopt(argc, argv, "o:")) != -1){
switch(c){
case 'o':
if(output){
exit(EXIT_FAILURE);
}
output = 1;
break;
case '?':
exit(EXIT_FAILURE);
default:
exit(EXIT_FAILURE);
}
}
for(; optind< argc; optind++) {
infile = fopen(argv[optind], "r");
size_t cpos = 0;
char str[100];
int ch;
while((ch = fgetc(infile)) != EOF ) {
if(ch == '\n' || ch == ' '){
fprintf(stderr, "%s\n", str);
str[0] = '\0';
continue;
} else{
str[cpos++] = ch;
}
}
str[cpos] = 0;
fprintf(stderr, "%s\n", str);
fclose(infile);
}
exit(EXIT_SUCCESS);
}
Моя проблема является частью инструкции while:
for(; optind< argc; optind++) {
infile = fopen(argv[optind], "r");
size_t cpos = 0;
char str[100];
int ch;
while((ch = fgetc(infile)) != EOF ) {
if(ch == '\n' || ch == ' '){
fprintf(stderr, "%s\n", str);
str[0] = '\0';
continue;
} else{
str[cpos++] = ch;
}
}
str[cpos] = 0;
fprintf(stderr, "%s\n", str);
fclose(infile);
}
В infile = fopen(argv[optind], "r")
Я сохраняю имя файла из argv
. В заявлении while
я читаю символы с infile
с fgetc
до EOF
. Я хочу читать каждый символ, пока не наберу пустую строку или пробел. Когда я нажимаю '\n'
или ' '
, я хочу отобразить это на stderr
, сбросить эту строку на пустую и продолжить читать символы в следующей строке. В противном случае ch
будет помещен в str[cpos]
(cpos
увеличивает каждый цикл). В конце str[cpos]
устанавливается на 0
, чтобы отметить конец строки, последний str
печатается и закрывается.
Проблема:
если я введу .txt файл (./program -o out.txt input.txt
)
word1
word2
word3
Все, что я получаю, это
word1
Я пытался установить str[0]= '\0'
как пустую строку, но после этого ничего не сохраняется на str
. Как вывести все 3 слова?