Форум программистов, компьютерный форум CyberForum.ru

программа выдает ошибку, как ее поправить - C++

Восстановить пароль Регистрация
 
strannik11
2 / 2 / 0
Регистрация: 03.02.2014
Сообщений: 28
09.02.2014, 22:38     программа выдает ошибку, как ее поправить #1
Добрый вечер! программа выдает ошибку: функция "int main(void)" уже имеет текст реализации
есть ли способ ее исправить??
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Megabar
22 / 22 / 3
Регистрация: 01.12.2013
Сообщений: 93
09.02.2014, 22:39     программа выдает ошибку, как ее поправить #2
strannik11, какой компилятор используйте? Покажите код
strannik11
2 / 2 / 0
Регистрация: 03.02.2014
Сообщений: 28
09.02.2014, 22:41  [ТС]     программа выдает ошибку, как ее поправить #3
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
#include "stdafx.h"
#include <stdio.h>
#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
using namespace std;
int main()
{
     setlocale(0,"");
 
   FILE * f;
   char bukv [1000];
   char buk[400] = "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNMйцукенгшщзхъфывапролджэячсмитьбюЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ";
   char pre[4] = "!?.";
   char s;
    s=0;
    char ch;
   f = fopen ("Input_1.txt" , "r");
   if (f == NULL) perror ("Error opening file");
   else {
     if ( fgets (bukv , 1000 , f) != NULL )
       puts (bukv);
      while (!feof(f))
    {
    ch = fgetc(f);
    if(ch == ' ' || ch == '\n' || ch == '\t') s++; 
    } 
    fseek(f,0,SEEK_SET); 
    printf("Слов в тексте : %i",s+1); 
    std::stringstream ss;
int i = s+1;
ss << s+1;
std::string stroc = ss.str();
  printf("%s",stroc.c_str());
    
     fclose (f);
   }
}
 
int main()
{
    FILE * f1;
    string stroc;
    f1 = fopen ("Input_1.txt" , "wb");
   if (f1 == NULL) perror ("Error opening file");
    {
  
        fputs(stroc.c_str(),f1);
    }
    fclose(f1);
    }
DrOffset
6456 / 3830 / 885
Регистрация: 30.01.2014
Сообщений: 6,627
09.02.2014, 22:43     программа выдает ошибку, как ее поправить #4
Так у вас реально два main`а Уберите лишний и проблема решена.
strannik11
2 / 2 / 0
Регистрация: 03.02.2014
Сообщений: 28
09.02.2014, 22:55  [ТС]     программа выдает ошибку, как ее поправить #5
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
#include "stdafx.h"
#include <stdio.h>
#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
using namespace std;
int main()
{
     setlocale(0,"");
 
   FILE * f;
   char bukv [1000];
   char buk[400] = "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNMйцукенгшщзхъфывапролджэячсмитьбюЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ";
   char pre[4] = "!?.";
   char s;
    s=0;
    char ch;
   f = fopen ("Input_1.txt" , "r");
   if (f == NULL) perror ("Error opening file");
   else {
     if ( fgets (bukv , 1000 , f) != NULL )
       puts (bukv);
      while (!feof(f))
    {
    ch = fgetc(f);
    if(ch == ' ' || ch == '\n' || ch == '\t') s++; 
    } 
    fseek(f,0,SEEK_SET); 
    printf("Слов в тексте : %i",s+1); 
    std::stringstream ss;
int i = s+1;
ss << s+1;
std::string stroc = ss.str();
  printf("%s",stroc.c_str());
    
     fclose (f);
   }
 
 
 
 
    FILE * f1;
    string stroc;
    f1 = fopen ("Input_1.txt" , "wb");
   if (f1 == NULL) perror ("Error opening file");
    {
  
        fputs(stroc.c_str(),f1);
    }
    fclose(f1);
    }
поправил, появился новый вопрос, почему у меня из исходного текстовика улетел весь текст? и во второй не прошло не одной записи?

Добавлено через 8 минут
почему из первого файла все улетело понял, была ошибка в строке:
C++
1
f1 = fopen ("Input_1.txt" , "wb");
заменил имя файла, но во второй должна записаться строка:
C++
1
{fputs(stroc.c_str(),f1);
подскажите почему ничего не происходит?
DrOffset
6456 / 3830 / 885
Регистрация: 30.01.2014
Сообщений: 6,627
09.02.2014, 23:40     программа выдает ошибку, как ее поправить #6
Цитата Сообщение от strannik11 Посмотреть сообщение
подскажите почему ничего не происходит?
У вас std::string stroc первый раз объявлена внутри условия else, по правилам С++ ее время жизни ограничено блоком. Ниже вы создали еще одну (другую!) переменную stroc, она естественно пуста. Поправить можно перенеся объявление выше:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
std::string stroc; //тут
 
if(f == NULL) //первое условие
{
    //.... ошибка
}
else
{
   // здесь читаем в строку
}
 
//.....
 
if(f1 == NULL) // второе условие
{
    //.... ошибка
}
else
{
    fputs(stroc.c_str(), f1);
}
strannik11
2 / 2 / 0
Регистрация: 03.02.2014
Сообщений: 28
10.02.2014, 13:37  [ТС]     программа выдает ошибку, как ее поправить #7
поправил так как вы посоветовали, но запись почему то так и не происходит, не могу понять почему?
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
#include "stdafx.h"
#include <stdio.h>
#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
using namespace std;
int main()
{
     setlocale(0,"");
   std::string stroc;
   FILE * f;
   char bukv [1000];
   char buk[400] = "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNMйцукенгшщзхъфывапролджэячсмитьбюЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ";
   char pre[4] = "!?.";
   char s;
    s=0;
    char ch;
    
   f = fopen ("Input_1.txt" , "r");
   if (f == NULL) perror ("Error opening file");
   else {
     if ( fgets (bukv , 1000 , f) != NULL )
       puts (bukv);
      while (!feof(f))
    {
    ch = fgetc(f);
    if(ch == ' ' || ch == '\n' || ch == '\t' || ch == '\n, ') s++; 
    } 
    fseek(f,0,SEEK_SET); 
    printf("Слов в тексте : %i  ",s); 
    std::stringstream ss;
int i = s;
ss << s;
std::string stroc = ss.str();
 
     fclose (f);
   }
   {
    FILE * f1;
    
    f1 = fopen ("Output_1.txt" , "wb");
    
        fputs(stroc.c_str(),f1);
    
    
    fclose(f1);
    system ("pause");
    }
    
}
DrOffset
6456 / 3830 / 885
Регистрация: 30.01.2014
Сообщений: 6,627
10.02.2014, 15:11     программа выдает ошибку, как ее поправить #8
Цитата Сообщение от strannik11 Посмотреть сообщение
поправил так как вы посоветовали, но запись почему то так и не происходит, не могу понять почему?
Ошибка та же. Объявление должно быть одно, а у вас их опять два.
C++
1
std::string stroc = ss.str();
заменить на
C++
1
stroc = ss.str();
strannik11
2 / 2 / 0
Регистрация: 03.02.2014
Сообщений: 28
10.02.2014, 15:26  [ТС]     программа выдает ошибку, как ее поправить #9
DrOffset, спасибо вам большое за советы, но эту ошибку исправил уже сам)) очень помогли мне.

Добавлено через 4 минуты
можно последний вопрос задать? как мне сделать так что бы моя программа не прибавляла в счетчике повторные слова, что бы например, слово "привет" считалось 1 раз, а потом программа пропускала бы его и шла дальше.
DrOffset
6456 / 3830 / 885
Регистрация: 30.01.2014
Сообщений: 6,627
10.02.2014, 19:47     программа выдает ошибку, как ее поправить #10
Цитата Сообщение от strannik11 Посмотреть сообщение
как мне сделать так что бы моя программа не прибавляла в счетчике повторные слова, что бы например, слово "привет" считалось 1 раз, а потом программа пропускала бы его и шла дальше.
Мне кажется самый просто способ для вас это использовать std::set. Добавлять туда слова из файла, дубликаты отсеятся.
Если я правильно понял задачу, то как-то так.
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
#include <string>
#include <cstdio>
#include <set>
#include <clocale>
#include <cstdlib>
 
int main()
{
    setlocale(0, "");
    std::set<std::string> words;
 
    if(FILE *f1 = fopen("Input_1.txt", "r"))
    {
        char buf[100];
        int  len = 0;
        char end = 0;
        while(fscanf(f1, "%99s%n%c", buf, &len, &end) > 0)
        {
            printf("%s ", buf);
            words.insert(std::string(buf, len));
        }
        printf("\n");
        fclose(f1);
 
        printf("Words count: [%i]\n", words.size());
    }
    else
    {
        perror("Error opening file 'Input_1.txt'");
        return 1;
    }
 
 
    if(FILE *f2 = fopen("Output_1.txt", "w"))
    {
        fprintf(f2, "%d", words.size());
        fclose(f2);
    }
    else
    {
        perror("Error opening file 'Output_1.txt'");
        return 1;
    }
    system("pause");
    return 0;
}
РАСУЛл
2 / 2 / 0
Регистрация: 06.11.2011
Сообщений: 68
10.02.2014, 21:30     программа выдает ошибку, как ее поправить #11
что ты мучаешься ? просто используй void main() и не мучайся))
DrOffset
6456 / 3830 / 885
Регистрация: 30.01.2014
Сообщений: 6,627
10.02.2014, 21:45     программа выдает ошибку, как ее поправить #12
Цитата Сообщение от РАСУЛл Посмотреть сообщение
что ты мучаешься ? просто используй void main() и не мучайся))
Такая форма main запрещена в С++.

3.6.1/2
An implementation shall not predefine the main function. This function shall not be overloaded. It shall
have a return type of type int
, but otherwise its type is implementation-defined. All implementations shall
allow both of the following definitions of main:
int main() { /* ... */ }
and
int main(int argc, char* argv[]) { /* ... */ }
РАСУЛл
2 / 2 / 0
Регистрация: 06.11.2011
Сообщений: 68
10.02.2014, 21:49     программа выдает ошибку, как ее поправить #13
ошибаешься , она часто используется ....
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.02.2014, 00:27     программа выдает ошибку, как ее поправить
Еще ссылки по теме:

Все по учебнику а программа выдает ошибку, посмотрите пожалуйста C++
Динамический массив: программа выдает ошибку памяти C++
C++ Программа запускается, но при компиляции выдает ошибку

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

Или воспользуйтесь поиском по форуму:
DrOffset
6456 / 3830 / 885
Регистрация: 30.01.2014
Сообщений: 6,627
11.02.2014, 00:27     программа выдает ошибку, как ее поправить #14
Цитата Сообщение от РАСУЛл Посмотреть сообщение
ошибаешься , она часто используется ....
Любой современный компилятор по-умолчанию выдаст ошибку. Кроме VS, которая это пропустит (расширение компилятора), но это исключительно ее личное дело. Программист, пишущий портабельный код, не должен на это закладываться. А тот, который не пишет, все равно должен про это знать.
Yandex
Объявления
11.02.2014, 00:27     программа выдает ошибку, как ее поправить
Ответ Создать тему
Опции темы

Текущее время: 21:19. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru