0 / 0 / 0
Регистрация: 30.03.2020
Сообщений: 14
1

Не работает fgets()

30.03.2020, 20:18. Показов 419. Ответов 1
Метки c++ (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
FILE* fin,*fout;       //покажчики на вхідний та вихідний файли
char name[2][20];   //назви вхідного та вихідного файлів
void Out(FILE* f);
//====================================
void ChooseName()
{
puts("enter name of file for write");
fflush(stdin);
// gets(name[0]);
fgets(name[0]);
puts("enter name of file for read");
fflush(stdin);
fgets(name[1]);
}
//============= створення текстового файла =================
void CreateFile()
{
  char answer;              //ознака завершення введення даних
  char s[100];                 //рядок, у який вводять дані
  fflush(stdin);
  if(strcmp(name[0],"")==0) ChooseName();
  fout=fopen(name[0],"w");    //відкрити файл для запису 
  do
  {
    puts("input string:");    //вивести запит користувачеві
    fflush(stdin);   
    fgets(s);                    //ввести з клавіатури рядок
    fputs(s,fout);                    //записати рядок у файл
    fputc('\n',fout);   //записати символ переведення курсору
    puts("continue ? [y/n]");
    answer=getchar();       //задати ознаку продовження введення
  }
  while((answer!='n')&&(answer!='N'));
  fclose(fout);            //закрити файл для запису
}
//======== додавання до рядка найдовшого слова ============
void AddWord()
{
  int max;                       //довжина найдовшого слова
  char word[20];                 //найдовше слово у рядку
  char sa[100], sb[100];       //зчитаний і записаний рядки
  char* p;                      //покажчик на поточне слово
  char* spacer=". ,:";          //роздільники слів у рядках
  fin=fopen(name[0],"r");       //відкрити файл для читання
  fout=fopen(name[1],"w");    //відкрити файл для запису
  while(!feof(fin))           //доки не кінець вхідного файлу
  {
    fgets(sa,100,fin);               //читати рядок із файлу
    if (feof(fin)) break; //якщо кінець файлу, вийти з циклу 
    strcpy(sb,sa);      //скопіювати зчитаний з файлу рядок
    p=strtok(sb,spacer);                      //перше слово
    max=strlen(p);                      //вважати найдовшим
    while (p!=NULL)                  //доки у рядку є слова
    {
      if(max<=strlen(p))   //якщо є слово довше за прийняте
      {
        max=strlen(p);    //вважати поточне слово найдовшим
        strcpy(word,p);        //запам’ятати найдовше слово
        if (word[strlen(word)-1]=='\n')        //якщо слово
                 //останнє в рядку, то його останній символ
            word[strlen(word)-1]=' ';  //замінити на пробіл
      }
      p=strtok(NULL,spacer);     //визначити наступне слово
    }
    sa[strlen(sa)-1]=' ';     //видалити символ кінця рядка
    strcat(sa,word);        //дописати слово у кінець рядка
    fputs(sa,fout);           //записати рядок у новий файл
    fputc('\n',fout); //записати символ нового рядка у файл
  }              //кінець циклу читання файлу
  fclose(fin);
  fclose(fout);
  fout=fopen(name[1],"r");
  Out(fout);
  getchar();
  fclose(fout);
}
//============ виведення файлу на екран ====================
void Out(FILE* f)
{             //параметр f – покажчик на файл, що виводиться
  char s[100];                    //рядок, зчитаний з файлу
  while(!feof(f))                     //доки не кінець файлу
   {
     fgets(s,100,f);                    //читати рядок файлу
     if(feof(f)) break;   //якщо кінець файлу, вийти з циклу
     puts(s);                       //вивести рядок на екран
   }
   fclose(f); 
}
//================головна програма ==========================
 int main()
 {
  char filename[20];
  puts("Search longest word in strings from file");
  system("pause");
  while (1)
  {
    system("cls");
    cout<<"          MENU  \n"<<endl;
    cout<<"1. Choose name of file"<<endl;
    cout<<"2. Create file"<<endl;
    cout<<"3. Read data from file"<<endl;
    cout<<"4. Add word to string"<<endl;;
    cout<<"5. Exit"<<endl;
    cout<<endl;
    int key;             //номер пункту меню
    cout<< "Choosen menu item:";
    cin>>key;
    system("cls");
    switch(key)         // вибір функції реалізації меню
    {
     case 1: {ChooseName();break;}
     case 2: {CreateFile();break;}
     case 3: {
              puts("choose name of file:");
              ChooseName();
              if((fin=fopen(name[0],"r"))==NULL) //можливість відкриття файлу
              {
               puts("file not created");
               strcpy(filename,name[1]);
              }
              else
               if ((fin=fopen(name[1],"r"))==NULL)
               {
                puts("file not created");
                strcpy(filename,name[0]);
               }
              if ((fin=fopen(filename,"r"))==NULL) puts("return menu");
              else
              {
                cout<<"text from file '" <<filename<<"':"<<endl;
                Out(fin);
              }
              getchar();break;
             }
     case 4: {AddWord(); break;}
     case 5: {exit (0); break;}
     default: {cout<<"Try another time...";getchar();break;}
    }
  }
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.03.2020, 20:18
Ответы с готовыми решениями:

Не работает fgets
Код еще не написан, но появилась какая-то проблема...ЧТо я делаю не так? #include &lt;stdio.h&gt;...

не корректно работает fgets()
здравствуйте, пишу код для удаления строки из файла(файл c именем fname с данными), проблема с...

Обьясните как работает fgets()
&lt;?php ## Извлечение строки со случайным номером. $ourFile = fopen(&quot;index.php&quot;, &quot;r&quot;); // ето...

Fgets вместе с scanf не работает
Доброго времени суток. Я начинающий C программист. При создании своего файлового менеджера, я...

1
457 / 312 / 60
Регистрация: 24.09.2017
Сообщений: 1,762
Записей в блоге: 6
30.03.2020, 23:46 2
http://cppstudio.com/post/1699/
Вы не привели код ошибки и в какой строке она возникает.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.03.2020, 23:46

Как работает функция fgets()?
Здравствуйте, такая проблема пытаюсь разобрать как работает функция fgets() как я понимаю она...

Почему fgets() не работает за пределами main()
fgets() работает в main(), но как только пытаюсь использовать в функции в другом исходном файле,...

Некорректно работает fgets(): найти и исправить ошибки
здравствуйте, пишу код для удаления строки из файла(файл c именем fname с данными), проблема с...

[c++] fgets не могу понять почему это не работает
Вообщем на диске C:\ лежит 3 файла 1 Файл test.txt 2 Файл 1.dll 3 Файл 2.dll в test.txt...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru