Программа пропускает 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; 
}

Объяснение кода листинга программы

  1. В начале кода определены массивы строк str_input и str_output для хранения данных из файла и их вывода.
  2. Задаются значения для констант LEN_FILE_NAME, LEN_ST и COUNT_STR.
  3. В функции read_from_file открывается файл с помощью fopen и затем используется цикл while для чтения строки из файла с помощью fgets.
  4. Чтение продолжается до тех пор, пока не будет достигнут конец файла.
  5. После чтения всех строк, файл закрывается с помощью fclose.
  6. В функции write_to_file открывается файл с помощью fopen и затем используется цикл while для записи строк в файл с помощью fputs.
  7. В цикле main сначала запрашивается имя входного файла с помощью scanf и затем выполняется функция read_from_file для чтения данных из этого файла.
  8. После успешного чтения данных, запрашивается имя выходного файла с помощью scanf и затем выполняется функция write_to_file для записи данных в этот файл.
  9. В конце программы выводится сообщение Exit и вызывается функция getch для приостановки выполнения программы до тех пор, пока пользователь не нажмет клавишу.
  10. Программа завершается с возвращаемым значением 0, что обычно означает успешное выполнение.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.818 из 5
Похожие ответы