Программа пропускает scanf - C (СИ) (76620)
Формулировка задачи:
Привет всем) Программа пропускает scanf(),не понятно почему, а так же проблема с записью файла. Подскажи в чем проблема. Заранее благодарна.
#include <stdio.h> #include <string.h> #define LEN_FILE_NAME 10 #define LEN_ST 100 #define COUNT_STR 100 char str_input [COUNT_STR][LEN_ST]; char str_output[COUNT_STR][LEN_ST]; extern int read_from_file(char *name_fin); extern void write_to_file(char *name_fout); //extern void translate(void); int read_from_file(char *name_fin) { FILE *F_input; char ch; int count_str,len_st; int i = -1; count_str = len_st = 0; F_input = fopen(name_fin, "rt"); if (F_input == NULL) { printf("The input file <%s> is not found.\nEnter the name of other file or press ENTER to exit\n", name_fin); scanf(" %c ",&ch);///????? return 1; } while(fgets(&str_input[count_str][len_st], LEN_ST, F_input) != NULL) { count_str++; } printf("\nRead the text:\n\n"); while (i++ < count_str) printf(" %s ", str_input[i]); printf(" \n "); fclose(F_input); return 0; } void write_to_file(char *name_fout) { FILE *F_output; int count_str, len_st; count_str = len_st = 0; F_output = fopen(name_fout, "wt"); fputs("//", F_output); while (fputs(&str_input[count_str][len_st], F_output) != EOF) { count_str++; fputs("//", F_output); } fclose(F_output); } int main(void) { char name_fin[LEN_FILE_NAME]={NULL},name_fout[LEN_FILE_NAME]={NULL}; char ch; printf("Enter name of input file: "); scanf(" %s ", name_fin); printf("Check_fin: %s\n", name_fin); if (read_from_file(name_fin)) return 1; printf("\nEnter name of output file: "); scanf(" %s ", name_fout); //printf("Check_fout: %s\n\n", name_fout); write_to_file(name_fout); printf("Exit");//??? scanf(" %c ", &ch); return 0; }
Решение задачи: «Программа пропускает scanf»
textual
Листинг программы
#include <stdio.h> #include <string.h> #include <conio.h> #define LEN_FILE_NAME 10 #define LEN_ST 100 #define COUNT_STR 100 char str_input [COUNT_STR][LEN_ST]; char str_output[COUNT_STR][LEN_ST]; extern int read_from_file(char *name_fin); extern void write_to_file(char *name_fout, int n); //extern void translate(void); int read_from_file(char *name_fin) { FILE *F_input; char ch; int count_str; int len_st; int i = -1; count_str = len_st = 0; F_input = fopen(name_fin, "rt"); if (F_input == NULL) { printf("The input file <%s> is not found.\nEnter the name of other file or press ENTER to exit\n", name_fin); return 0; } while(fgets(&str_input[count_str][len_st], LEN_ST, F_input)) { count_str++; } printf("\nRead the text:\n\n"); while (i++ < count_str) printf(" %s ", str_input[i]); printf(" \n "); fclose(F_input); return count_str; } void write_to_file(char *name_fout, int n) { FILE *F_output; int count_str, len_st; count_str = len_st = 0; F_output = fopen(name_fout, "wt"); while (n) { fputs("//", F_output); fputs(&str_input[count_str][len_st], F_output); count_str++; n--; } } int main(void) { char name_fin[LEN_FILE_NAME]={NULL},name_fout[LEN_FILE_NAME]={NULL}; char ch; int count_str; do { printf("Enter name of input file: "); scanf("%s", name_fin); printf("Check_fin: %s\n", name_fin);} while (!(count_str=read_from_file(name_fin))); printf("\nEnter name of output file: "); scanf(" %s ", name_fout); //printf("Check_fout: %s\n\n", name_fout); write_to_file(name_fout, count_str); printf("Exit");//??? getch(); return 0; }
Объяснение кода листинга программы
- В начале кода определены массивы строк
str_input
иstr_output
для хранения данных из файла и их вывода. - Задаются значения для констант
LEN_FILE_NAME
,LEN_ST
иCOUNT_STR
. - В функции
read_from_file
открывается файл с помощьюfopen
и затем используется циклwhile
для чтения строки из файла с помощьюfgets
. - Чтение продолжается до тех пор, пока не будет достигнут конец файла.
- После чтения всех строк, файл закрывается с помощью
fclose
. - В функции
write_to_file
открывается файл с помощьюfopen
и затем используется циклwhile
для записи строк в файл с помощьюfputs
. - В цикле
main
сначала запрашивается имя входного файла с помощьюscanf
и затем выполняется функцияread_from_file
для чтения данных из этого файла. - После успешного чтения данных, запрашивается имя выходного файла с помощью
scanf
и затем выполняется функцияwrite_to_file
для записи данных в этот файл. - В конце программы выводится сообщение
Exit
и вызывается функцияgetch
для приостановки выполнения программы до тех пор, пока пользователь не нажмет клавишу. - Программа завершается с возвращаемым значением 0, что обычно означает успешное выполнение.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д