Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
strannik11
2 / 2 / 0
Регистрация: 03.02.2014
Сообщений: 28
#1

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

09.02.2014, 22:38. Просмотров 654. Ответов 13
Метки нет (Все метки)

Добрый вечер! программа выдает ошибку: функция "int main(void)" уже имеет текст реализации
есть ли способ ее исправить??
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.02.2014, 22:38
Здравствуйте! Я подобрал для вас темы с ответами на вопрос программа выдает ошибку, как ее поправить (C++):

Программа выдает ошибку - C++
Доброго времени суток, после компиляции программа дает сбой и выдает: Необработанное исключение в "0x00051bd0" в "9.8.exe": 0xC0000005:...

Не запускается программа, выдает ошибку - C++
К теме прикрепил скрин ошибки. В начале Visual Studio советовал использовать strcpy_s вместо strcpy и выдавал предупреждение. ...

Программа выдает одну и ту же ошибку - C++
Программа выдает одну и ту же ошибку Parameter argc/argv never used Как ее исправить? Программный код на С++ написанный в Borland...

Ошибку выдает программа во время работы - C++
Программа должна открывать файл и искать заданное пользователем слово Вот код: #include <iostream> #include <string> #include...

подскажите, почему программа выдает ошибку? - C++
задание примерное такое: на заданном интервале посчитать значение ряда Тейлора с заданным шагом и точностью. Исправьте, если сможете....

программа выдает ошибку при компиляции - C++
подскажите, пожалуста, в чем ошибка..При компиляции выскакивает ошибка undefined reference to 'Obrabotchik::SetListContinents()' ...

13
Megabar
22 / 22 / 3
Регистрация: 01.12.2013
Сообщений: 93
09.02.2014, 22:39 #2
strannik11, какой компилятор используйте? Покажите код
0
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);
    }
0
DrOffset
7377 / 4454 / 1009
Регистрация: 30.01.2014
Сообщений: 7,304
09.02.2014, 22:43 #4
Так у вас реально два main`а Уберите лишний и проблема решена.
1
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);
подскажите почему ничего не происходит?
0
DrOffset
7377 / 4454 / 1009
Регистрация: 30.01.2014
Сообщений: 7,304
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);
}
1
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");
    }
    
}
0
DrOffset
7377 / 4454 / 1009
Регистрация: 30.01.2014
Сообщений: 7,304
10.02.2014, 15:11 #8
Цитата Сообщение от strannik11 Посмотреть сообщение
поправил так как вы посоветовали, но запись почему то так и не происходит, не могу понять почему?
Ошибка та же. Объявление должно быть одно, а у вас их опять два.
C++
1
std::string stroc = ss.str();
заменить на
C++
1
stroc = ss.str();
1
strannik11
2 / 2 / 0
Регистрация: 03.02.2014
Сообщений: 28
10.02.2014, 15:26  [ТС] #9
DrOffset, спасибо вам большое за советы, но эту ошибку исправил уже сам)) очень помогли мне.

Добавлено через 4 минуты
можно последний вопрос задать? как мне сделать так что бы моя программа не прибавляла в счетчике повторные слова, что бы например, слово "привет" считалось 1 раз, а потом программа пропускала бы его и шла дальше.
0
DrOffset
7377 / 4454 / 1009
Регистрация: 30.01.2014
Сообщений: 7,304
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;
}
0
РАСУЛл
2 / 2 / 0
Регистрация: 06.11.2011
Сообщений: 68
10.02.2014, 21:30 #11
что ты мучаешься ? просто используй void main() и не мучайся))
0
DrOffset
7377 / 4454 / 1009
Регистрация: 30.01.2014
Сообщений: 7,304
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[]) { /* ... */ }
0
РАСУЛл
2 / 2 / 0
Регистрация: 06.11.2011
Сообщений: 68
10.02.2014, 21:49 #13
ошибаешься , она часто используется ....
0
DrOffset
7377 / 4454 / 1009
Регистрация: 30.01.2014
Сообщений: 7,304
11.02.2014, 00:27 #14
Цитата Сообщение от РАСУЛл Посмотреть сообщение
ошибаешься , она часто используется ....
Любой современный компилятор по-умолчанию выдаст ошибку. Кроме VS, которая это пропустит (расширение компилятора), но это исключительно ее личное дело. Программист, пишущий портабельный код, не должен на это закладываться. А тот, который не пишет, все равно должен про это знать.
0
11.02.2014, 00:27
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.02.2014, 00:27
Привет! Вот еще темы с ответами:

Программа выдает ошибку при компиляции на dev c++ - C++
#include &lt;iostream&gt; #include &lt;ctime&gt; using namespace std; int main() { srand(time(NULL)); int *arr; int...

Программа выдает одну ошибку, якобы в 48 строчке - C++
Завтра мне кирдык если не сделаю! Программа выдает одну ошибку, якобы в 48 строчке #include &lt;iostream.h&gt; #include &lt;math.h&gt; double...

Динамический массив: программа выдает ошибку памяти - C++
Вот программа, выдает ошибку памяти как её исправить? не получается #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;stdlib.h&gt; ...

Подскажите как исправить ошибку. прога ломается на 79 строке. а ошибку не выдает - C++
#include &lt;iostream&gt; #include &lt;cstdlib&gt; #include &lt;ctime&gt; using namespace std; int chisla(int a,int b) { ...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.