Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Помогите найти ошибку в программке

78K
05 января 2012 года
MrTicket
1 / / 04.01.2012
Вот код программы:

#include "stdafx.h"
#include <stdio.h> //getchar(), putchar(), printf()
#include <conio.h> //getch()

#define eof -1
#define yes 1
#define no 0

int main()
{
int c;
int nc;
int nl;
int nw;
int in;
nc=nl=nw=0;
in=no;
printf("Enter your strings end press <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
;
}
printf("Characters' number is %d\n",nc);
printf("Words' number is %d\n",nw);
printf("Strings' number is %d\n",nl);
_getch();
}

Ее суть в том, что она должна подсчитать количество символов, слов, строк. Все работает кроме слов. Он их игнорирует вообще. Подскажите в чем ошибка, весь мозг уже сломал.:confused:
20K
05 января 2012 года
sem2711
124 / / 23.09.2009
Нашел ошибку:
вместо else if(in=no) должно быть, естественно, else if(in==no).
Ошибка сколь коварная (малозаметная), столь же часто встречающаяся.
9.7K
05 января 2012 года
Vitamant
228 / / 07.02.2011
Увжаемый, пользуйся, пожалуйста, тегом CODE, когда постишь на форуме код. А заодно делай в коде пробелы и давай человеческие имена переменным.

Вопрос к обоим: а как оно у вас работает? Помимо означенной sem2711 ошибки, getchar считывает символ из переданной строки... Строки... Строки... одной строки... Откуда в ней могут взяться символы новой строки? Более того, попытка чтения после конца этой строки приводит ко входу в бесконечный цикл. Или я чего-то не понимаю?

Вот рабочий код, который считает символы и слова. За каким демоном тебе понадобились макросы - не знаю.
Код:
#include "stdafx.h"
#include <stdio.h> //getchar(), putchar(), printf()
#include <conio.h> //getch()

int main()
{
    bool waitWord = true;
    int currentChar, characters, words;
    characters = words = 0;

    printf("Enter your strings end press <Enter>\r\n");

    while((currentChar = getchar()) != '\n')
    {
        characters++;

        if(currentChar == ' ' || currentChar == '\n' || currentChar == '\t')
            waitWord = true;
        else if(waitWord)
        {
            waitWord = false;
            words++;
        }
    }

    printf("Characters' number is %d\n", characters);
    printf("Words' number is %d\n", words);
    _getch();
}
20K
05 января 2012 года
sem2711
124 / / 23.09.2009
[QUOTE=Vitamant]Вопрос к обоим: а как оно у вас работает? Помимо означенной sem2711 ошибки, getchar считывает символ из переданной строки... Строки... Строки... одной строки... Откуда в ней могут взяться символы новой строки? Более того, попытка чтения после конца этой строки приводит ко входу в бесконечный цикл. Или я чего-то не понимаю?[/QUOTE]
Для имитации конца ввода в консоли используется сочетание клавиш <Ctrl>+Z. Работает так, как предполагал ТС.
9.7K
06 января 2012 года
Vitamant
228 / / 07.02.2011
Цитата: sem2711
Для имитации конца ввода в консоли используется сочетание клавиш <Ctrl>+Z. Работает так, как предполагал ТС.


Век живи, век учись! :)
...а у меня он все равно виснет. Считывает символ под номером 10 и уходит в себя. :) Но я не сишник, вам виднее. :)

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог