Top.Mail.Ru
Ответы

Не работает код, написанный на Си

#define MAX_LEN 80
void main() {
SetConsoleCP(1251);
SetConsoleOutputCP(1251);


FILE* fin = fopen("C:\\файлы\\text4.txt", "rt");
if (fin == NULL) {
printf("Входной файл не найден");
return;
}

FILE* fout;
fout = fopen("C:\\файлы\\out4.txt", "wt");
if (fout == NULL) {
printf("Выходной файл не создался");
return;
}

int ch;
int is_letter = 0;
char word[MAX_LEN];
int word_len = 0;
while ((ch = getc(fin)) != EOF) {
if (isalpha((unsigned char)ch)) {
if (!is_letter) {
word_len = 0;
is_letter = 1;
}
if (word_len < MAX_LEN - 1) {
word[word_len++] = ch;
}
else {
}
}

else {
if (is_letter) {
word[word_len] = '\0';
fprintf(fout, "%s", word);

int isCaps = 0;
for (int i = 0; word[i] != '\0'; i++) {
if (isupper((unsigned char)word[i]))
isCaps = 1;
}

if (isCaps) {
fprintf(fout, "+");
printf("%s\n", word);
}
}

is_letter = 0;
fprintf(fout, "%c", ch);
}
}
if (is_letter) {
word[word_len] = '\0';

fprintf(fout, "%s", word);

int isCaps = 0;
for (int i = 0; word[i] != '\0'; i++) {
if (isupper((unsigned char)word[i]))
isCaps = 1;
}

if (isCaps) {
fprintf(fout, "+");
printf("%s\n", word);
}
}
fclose(fin);
fclose(fout);

printf("ЛР23 ЗАДАЧА 4 FINISH\n");
}

Помогите, пожалуйста, исправить!
Условие таково: считывается файл с текстом, если в строке есть слово с заглавной буквы, то после этого слова ставится "+". Код не работает на русском языке совсем, если же в файле строки на английском, то выводится только 1 слово...

Только авторизированные пользователи могут оставлять свои ответы
Дата
Популярность
Аватар пользователя
Новичок
123456789101112131415161718192021222324252627282930313233343536373839
 #include <stdio.h> 
#include <string.h> 
#include <ctype.h> 
 
#define BUFFER_SIZE 1024 
 
#define IN_FILE     "text4.txt" 
#define OUT_FILE    "out4.txt" 
 
int main(void) 
{ 
    FILE *in, *out; 
    char buffer[BUFFER_SIZE]; 
    char *token; 
 
    if (in = fopen(IN_FILE, "r")) { 
        out = fopen(OUT_FILE, "w"); 
 
        fread(buffer, sizeof *buffer, BUFFER_SIZE, in); 
 
        token = strtok(buffer, " "); 
     
        do { 
            fputs(token, out); 
 
            if (isupper(token[0])) { 
                fputc('+', out); 
            } 
             
            fputc(' ', out); 
        } while (token = strtok(NULL, " "));  
    } 
    else { 
        fprintf(stderr, "%s open err\n", IN_FILE); 
        return -1; 
    } 
 
    return 0; 
} 
Аватар пользователя
Оракул

Это не код, а ерунда.