#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();
}
Помогите найти ошибку в программке
#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:
вместо else if(in=no) должно быть, естественно, else if(in==no).
Ошибка сколь коварная (малозаметная), столь же часто встречающаяся.
Вопрос к обоим: а как оно у вас работает? Помимо означенной sem2711 ошибки, getchar считывает символ из переданной строки... Строки... Строки... одной строки... Откуда в ней могут взяться символы новой строки? Более того, попытка чтения после конца этой строки приводит ко входу в бесконечный цикл. Или я чего-то не понимаю?
Вот рабочий код, который считает символы и слова. За каким демоном тебе понадобились макросы - не знаю.
Код:
Для имитации конца ввода в консоли используется сочетание клавиш <Ctrl>+Z. Работает так, как предполагал ТС.
Цитата: sem2711
Для имитации конца ввода в консоли используется сочетание клавиш <Ctrl>+Z. Работает так, как предполагал ТС.
Век живи, век учись! :)
...а у меня он все равно виснет. Считывает символ под номером 10 и уходит в себя. :) Но я не сишник, вам виднее. :)