Программа пропускает 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, что обычно означает успешное выполнение.