[C++] Синтаксическая ошибка

Непопадающие в другие разделы и прочие философские темы

[C++] Синтаксическая ошибка

Сообщение ibe » 29 авг 2009, 20:49

Написал консольную программу подсчета символов, строк, слов.
Вот её код:
Код: Выделить всёРазвернуть
#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 nl; // счетчик строк
    int nw; // счетчик слов
    int nc; // счетчик подсчета введённых символов
    int in; // слежение за тем, находится ли программа внурти слова или нет
 
nc=nw=nl=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')
      in=no;
   else if (in==no)
   {
      in=yes; // программа находится внутри слова
      nw++; // и это слово нужно учесть в счетчике слов
   }
   else ;//если in != no

} // закрывающая скобка оператора 'while'
printf("Strings - %d\n", nl);
printf("Words - %d\n", nw);
printf("Vcero simvolov - %d\n", nc);


getch();

При компиляции, компилятор(в моём случае - это MS Visual C++) ругается на строку
Код: Выделить всёРазвернуть
while ((c=getchar()) != eof)

Код ошибки:
Visual C++ писал(а):error C2059: синтаксическая ошибка: ')'
Изображение
Аватара пользователя
ibe
Активный участник
 
Сообщения: 893
Зарегистрирован: 31 мар 2009, 00:46

Re: [C++] Синтаксическая ошибка

Сообщение ibe » 30 авг 2009, 00:22

Пробовал через FOR - все нормально. Почему компилятор так реагирует на скобку ? =@
Изображение
Аватара пользователя
ibe
Активный участник
 
Сообщения: 893
Зарегистрирован: 31 мар 2009, 00:46

Re: [C++] Синтаксическая ошибка

Сообщение DPX-Infinity » 30 авг 2009, 11:01

вот она, венда :lol: в юниксах уже хз сколько лет есть wc - делает всё это)
по существу:
1. использовать маленькие буквы в макроподстановках конечно можно, но считается плохим стилем.
2. conio.h - некроссплатформенная библиотека, юзать её - не гуд.
3. считывать ввод по одному символу - это жесть. ввод надо читать во внутренний буфер и там уже проводить подсчёты.
4. "Enter your strings and press the key <Enter>" - оч круто :) какие могут быть _строки_, если энтер завершает ввод? конечно, код на энтер не будет так реагировать, но вводить юзера в заблуждение - плохая практика) пиши уже "... and press Ctrl+Z"
5. getchar использовать здесь нельзя - он использует буферизацию. То есть символы не уйдут в программу до нажатия на ENTER. здесь нужно использовать getch.
6. мешать вывод на английском и транслитом - это вообще убийственно.. Подскажу - "Всего символов" <=> "Characters total" или просто "Characters".
7. зачем нужен пустой else?
вроде всё, что бросилось в глаза сразу.

у меня такая программа работает замечательно:
Код: Выделить всёРазвернуть
#include <cstdio>
using namespace std;

int main(){
    int c = 0;
    while ((c=getchar())!=EOF)
        putchar(c);
    return 0;
}

правда у меня g++ компилятор...
кстати, EOF объявлять не обязательно - оно уже есть в stdio.
Изображение
Переходите на Jabber! За ним будущее!
Желаю вам опенсорса!
Аватара пользователя
DPX-Infinity
Активный участник
 
Сообщения: 723
Зарегистрирован: 02 сен 2007, 20:45
Откуда: Саратов


Вернуться в Разное

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10