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

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

Войти
Регистрация
Восстановить пароль
 
denver
1610 / 279 / 3
Регистрация: 19.09.2009
Сообщений: 701
#1

Ошибка с оператором - C++

11.10.2009, 10:13. Просмотров 725. Ответов 12
Метки нет (Все метки)

Ребят помогите не могу вдуплить только начал изучать С++ и при написании программы посчета слов в файле выдает ошибку (недопустимый else без парного if)
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
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#define eof -1
 
#define yes 1
#define no 0
 
int _tmain(int argc, _TCHAR* argv[])
{
    int c;//для ввода слов
    int nc;//для подсчета введеных символов
    int nl;//счетчик строк
    int nw;// счетчик слов
    int in;/*флажок слежение за тем находится ли в данный момент программа
           внутри слова или нет */
 
nc=nl=nw=0;//обнуление счетчиков
in=no;// до ввода находимся вне слова
printf("enter your strings and press the key<ENTER> >\n");
while((c=getchar()) !=eof)
{
if(c != '\n')
nc++;
else
nl++;
if(c==' ' || c=='\n' || c=='\t')
else if(in==no) // здесь показывает ошибку
{
    in=yes;
    nw++;
}
else
;
}
printf("string.....=%d\n",nl);
printf("worlds.....=%d\n",nw);
printf("characters.....=%d\n",nc);
_getch();
}
Заранее признателен.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
TanT
эволюционирую потихоньку
464 / 462 / 43
Регистрация: 30.06.2009
Сообщений: 1,399
11.10.2009, 10:31     Ошибка с оператором #2
C++
1
2
3
if(c==' ' || c=='\n' || c=='\t')
;                                              // здесь что-то должно быть хотябы ;
else if(in==no) // здесь показывает ошибку
хотя зачем так делать если можно сделать так
C++
1
2
if(!(c==' ' || c=='\n' || c=='\t'))  
 if(in==no)
GennDALF
12 / 12 / 0
Регистрация: 24.09.2009
Сообщений: 61
11.10.2009, 10:32     Ошибка с оператором #3
Это потому что у тебя после условия (28 строка) нет ни одного оператора.
Программа ожидает выполнения какого-то действия, а ты заставляешь ее сразу переходить уже к следующему условию...
Если так действительно и надо, то чтобы программа заработала поставь в конце 28 строки точку с запятой. Или сотри 28 строку, а вместо else if поставь просто if
valeriikozlov
Эксперт C++
4663 / 2489 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
11.10.2009, 10:45     Ошибка с оператором #4
Или так:
C++
1
if(!(c==' ' || c=='\n' || c=='\t') && in==no)
^Tecktonik_KiLLeR
1158 / 440 / 22
Регистрация: 23.06.2009
Сообщений: 6,227
Завершенные тесты: 1
11.10.2009, 10:51     Ошибка с оператором #5
GennDALF, а что на 28-ой не так?
GennDALF
12 / 12 / 0
Регистрация: 24.09.2009
Сообщений: 61
11.10.2009, 10:57     Ошибка с оператором #6
МедведЪ, с самой 28 все отлично, просто я в упор не понимаю зачем нужно условие, если при его истинности ничего не происходит.
denver
1610 / 279 / 3
Регистрация: 19.09.2009
Сообщений: 701
11.10.2009, 11:01  [ТС]     Ошибка с оператором #7
Спасибо большое за оперативность поставил точку с запятой все работает правда слова не считает все время 1 пишет щас буду дальше копаться. Пишу не сам а по книге поэтому разобраться не мог, в ней точка с зяпятой отстствует.
^Tecktonik_KiLLeR
1158 / 440 / 22
Регистрация: 23.06.2009
Сообщений: 6,227
Завершенные тесты: 1
11.10.2009, 11:12     Ошибка с оператором #8
denver,
C++
1
2
if(c==' ' || c=='\n' || c=='\t')
else if(in==no) // здесь показывает ошибку
у тебя у первого if нету тела,условие есть а тела нету
denver
1610 / 279 / 3
Регистрация: 19.09.2009
Сообщений: 701
11.10.2009, 11:18  [ТС]     Ошибка с оператором #9
вот полность переписал с книжки с коментами как у них оно выглядит
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 "stdafx.h"
#include <stdio.h>
#include <conio.h>
#define eof -1
 
#define yes 1
#define no 0
 
int _tmain(int argc, _TCHAR* argv[])
{
    int c;//для ввода слов
    int nc;//для подсчета введеных символов
    int nl;//счетчик строк
    int nw;// счетчик слов
    int in;/*флажок слежение за тем находится ли в данный момент программа
           внутри слова или нет */
 
nc=nl=nw=0;//обнуление счетчиков
in=no;// до ввода находимся вне слова
printf("enter your strings and press the key<ENTER> >\n");
while((c=getchar()) !=eof)
{
if(c != '\n')// если символ не конец строки
nc++; /*какой бы символ не ввели (кроме ctrl+z и '\n'), его надо учитывать в счетчике*/
else//иначе... (если введеный символ конец строки)
nl++;/* здесь с=='\n' и поэтому сколько раз нажали <enter>, столько и будет строк*/
if(c==' ' || c=='\n' || c=='\t') /*если символ хотя бы один из in=no;*/
/*сколько бы раз ни нажимали клавишу пробел, конец строки, 
табуляция, всегда будет нажодится вне слова */
else if(in==no) /* сюда попадаем только тогда, когда нажали любую клавишу, кроме пробела
                , <enter> и конца строки*/
{
    in=yes; /* если до этого мы были вне слова (in=no), то
            сейчас попали на начало слова*/
    nw++; // и слово надо учесть в счетчике
}
else // иначе... если (in != no)
;/* эта часть выполняется, когда мы, находясь внутри слова (in != no), ввели любой символ, кроме пробела, 
 знака табуляции и знака конца строки. в этом случае подсчет слов не ведется, а программа возращается
 на ввод следующего символа*/
}
printf("string.....=%d\n",nl);
printf("worlds.....=%d\n",nw);
printf("characters.....=%d\n",nc);
_getch();
}
GennDALF
12 / 12 / 0
Регистрация: 24.09.2009
Сообщений: 61
11.10.2009, 11:25     Ошибка с оператором #10
Ничего личного, но я бы не стал читать такую книжку
^Tecktonik_KiLLeR
1158 / 440 / 22
Регистрация: 23.06.2009
Сообщений: 6,227
Завершенные тесты: 1
11.10.2009, 12:05     Ошибка с оператором #11
denver, елси подсчет слов,то используй код из КиР
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#DEFINE    YES  1
#DEFINE    NO   0
 
MAIN()  /* COUNT LINES, WORDS, CHARS IN INPUT */
{
   INT C, NL, NW, INWORD;
 
   INWORD = NO;
   NL = NW = NC = 0;
   WHILE((C = GETCHAR()) != EOF)  {
       ++NC;
       IF (C == '\N')
            ++NL;
       IF (C==' ' \!\! C=='\N' \!\! C=='\T')
            INWORD = NO;
       ELSE IF (INWORD == NO)  {
            INWORD = YES;
            ++NW;
       }
   }
   PRINTF("%D %D %D\N", NL, NW, NC);
}
Добавлено через 4 минуты
denver, только тут надо добавить int рядом с main,и все написать с маленькими буквами
denver
1610 / 279 / 3
Регистрация: 19.09.2009
Сообщений: 701
11.10.2009, 12:06  [ТС]     Ошибка с оператором #12
Цитата Сообщение от GennDALF Посмотреть сообщение
Ничего личного, но я бы не стал читать такую книжку
Согласен полностью буду искать Хортона базовый курс, а эту выкину.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.10.2009, 12:08     Ошибка с оператором
Еще ссылки по теме:

C++ Error C2679. Ошибка с оператором >>
C++ Компилятор визуаль студио 2008 с++,выскакивает ошибка с оператором вывода "<< "
Работа с оператором for C++
ошибка с оператором множественного выбора C++
Не могу разобраться с оператором while C++

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

Или воспользуйтесь поиском по форуму:
^Tecktonik_KiLLeR
1158 / 440 / 22
Регистрация: 23.06.2009
Сообщений: 6,227
Завершенные тесты: 1
11.10.2009, 12:08     Ошибка с оператором #13
denver, ищи КиР это по С а по С++ страуструп
Yandex
Объявления
11.10.2009, 12:08     Ошибка с оператором
Ответ Создать тему
Опции темы

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