Автор Тема: програмка на С  (Прочетена 4208 пъти)

cRuSh3r

  • Напреднали
  • *****
  • Публикации: 53
    • Профил
програмка на С
« -: Jan 29, 2010, 14:33 »
Здр.,
тука се боря с една програма ,която трбва да брои - нов ред,дума и символи ,които са въведени.Това е кода
Цитат
#include <stdio.h>
#define IN 1
#define OUT 0

main()
{
int c, nl, nw, nc, state;
state = OUT;
nl = nw = nc = 0;
while ((c = getchar()) != EOF) {
++nc;
if (c == '\n')
++nl;
if (c == ' ', c == '\n', c = '\t')
state = OUT;
else if (state == OUT) {
state = IN;
++nw;
}
}
printf("%d %d %d\n", nl, nw, nc);
}

Проблема е ,че неиска да брои думите.Винаги изкарва 0.  ???
Активен

lkr

  • Напреднали
  • *****
  • Публикации: 81
    • Профил
Re: програмка на С
« Отговор #1 -: Jan 29, 2010, 14:50 »
if (c == ' ', c == '\n', c = '\t')

Код:
 if (c == ' ' || c == '\n' || c == '\t') 
Активен

cRuSh3r

  • Напреднали
  • *****
  • Публикации: 53
    • Профил
Re: програмка на С
« Отговор #2 -: Jan 29, 2010, 14:54 »
Ами дава ми грешка компилатора (lcc-win32) :
Цитат
the left side of the assignment can't be assigned to

pp
|| - значи "или" ?
Активен

lkr

  • Напреднали
  • *****
  • Публикации: 81
    • Профил
Re: програмка на С
« Отговор #3 -: Jan 29, 2010, 15:00 »
Дава ти, защото пак имаш:  c = '\t', а не c == '\t'
Активен

tyuio

  • Гост
Re: програмка на С
« Отговор #4 -: Jan 29, 2010, 15:10 »
"=" присвояване
"==" равенство
Моно грешки има или поне много неща които са ненужни:
nl = nw = nc = 0;
това е не нужно щом си ги дефинирал те са си 0.
После коя дума ти брои? аз дума не виждам както и функция за въвеждане
Аз този компилатор не го знам поддържа ли АНСИ стандарта?
Почни от начало с езика С този пример е почти безсмислен!
Активен

cRuSh3r

  • Напреднали
  • *****
  • Публикации: 53
    • Профил
Re: програмка на С
« Отговор #5 -: Jan 29, 2010, 15:29 »
Дава ти, защото пак имаш:  c = '\t', а не c == '\t'
Oправи се :)

@tyuio
Аз почнах от начало.В момент ачета Kernighan & Ritchie - The C Programming Language. Просто такъв е примера в книгата.
А това ,че като са си дефинирани ,значи са 0 не го знех или поне още не съм стигнал до там :P

pp
http://en.wikipedia.org/wiki/LCC_(compiler)
Активен

lkr

  • Напреднали
  • *****
  • Публикации: 81
    • Профил
Re: програмка на С
« Отговор #6 -: Jan 29, 2010, 15:44 »
nl = nw = nc = 0;
това е не нужно щом си ги дефинирал те са си 0.
Пълни глупости, 0 са само, ако са static.

После коя дума ти брои? аз дума не виждам както и функция за въвеждане

Ми как да видиш, то чете от stdin.
« Последна редакция: Jan 29, 2010, 15:50 от lkr »
Активен

cRuSh3r

  • Напреднали
  • *****
  • Публикации: 53
    • Профил
Re: програмка на С
« Отговор #7 -: Jan 29, 2010, 15:55 »


Цитат
Цитат
После коя дума ти брои? аз дума не виждам както и функция за въвеждане

Ми как да видиш, то чете от stdin.
E  getchar не е ли за въвеждане ?Нали то чете това което въвеждаш от клавиатурата или тука става дума за хедър файла ?
« Последна редакция: Jan 29, 2010, 15:56 от cRuSh3r »
Активен

tyuio

  • Гост
Re: програмка на С
« Отговор #8 -: Jan 29, 2010, 15:56 »
nl = nw = nc = 0;
това е не нужно щом си ги дефинирал те са си 0.
Пълни глупости, 0 са само, ако са static.

После коя дума ти брои? аз дума не виждам както и функция за въвеждане

Ми как да видиш, то чете от stdin.
Аз не знам в С да има статик поправиме?
stdin също не видях само getchar w while
Не съм го компилирал но така на пръв поглед не ми изглежда работеща коректно С програма даже и да не плюе грешки
Активен

tyuio

  • Гост
Re: програмка на С
« Отговор #9 -: Jan 29, 2010, 15:57 »
щом е в while това е условие за цикъла незнам как ще вземи променливата когато е в () а не в {}
Активен

lkr

  • Напреднали
  • *****
  • Публикации: 81
    • Профил
Re: програмка на С
« Отговор #10 -: Jan 29, 2010, 16:03 »

Цитат
Аз не знам в С да има статик поправиме?

http://wiki.answers.com/Q/What_is_a_static_identifier_in_C

Цитат
E  getchar не е ли за въвеждане ?Нали то чете това което въвеждаш от клавиатурата или тука става дума за хедър файла ?

Код:
laker@dg:~$ echo "bla bla bla" | ./a.out
1 3 12

Код:
laker@dg:~$ ./a.out < bla.txt
1 3 12
Активен

tyuio

  • Гост
Re: програмка на С
« Отговор #11 -: Jan 29, 2010, 16:38 »
Прав си има статик, никога не съм я ползвал! Въпреки това не смятам че програмата е написана коректно особенно като за начинаещ има много "но"
Активен

hyankov

  • Напреднали
  • *****
  • Публикации: 86
    • Профил
Re: програмка на С
« Отговор #12 -: Jan 31, 2010, 13:18 »
@crusher: Реализирал си един от най-неприятните бъгове в С,С++ (поне според мен) и то още в самото начало. "Което е добре!" (Б.Турбото). В книгата Expert C Programming именно с това започват и са дали един полезен съвет, който се опитвам да спазвам. Когато имаш проверка за равенство (a.k.a оператор ==) може да слагаш константния израз (ако има такъв) от лявата страна. Тогава дори да си допуснал грешка (= вместо ==) компилатора ще те наплюе с грешка от рода lvalue нещо си.

@tyuio: Всъщност най-вероятно си използвал static променливи, без обаче изрично да си го заявил. Например - всички глобални променливи, които дефинираш, са по същество статични, дори без да използваш ключовата дума static. За тях е вярно, че можеш напълно убедено да вярваш, че са инициализирани и то с нула. (Ех, този Весо Компилатора - голям идиот, ама хубави неща ни научи)

Поздрави,
Ицо
Активен

tyuio

  • Гост
Re: програмка на С
« Отговор #13 -: Jan 31, 2010, 13:36 »
Цитат
(Ех, този Весо Компилатора - голям идиот, ама хубави неща ни научи)
Ама той ли ти е преподавал :) Легендарна личност !
Активен

task_struct

  • Напреднали
  • *****
  • Публикации: 576
  • Distribution: Kubuntu 14.04
  • Window Manager: KDE 4.13
    • Профил
Re: програмка на С
« Отговор #14 -: Jan 31, 2010, 14:30 »
nl = nw = nc = 0;
това е не нужно щом си ги дефинирал те са си 0.

Имахме си един джава програмист в офиса дето беше на същото мнение. Бая работа ми съзададе да му оправя мизериите. Та от тогава вече наистина вярвам на приказката, че Джавата поврежда мозъка  ;D (сигурно и джава програмистите мислят така за C :D )

Има една интересна книжка - Writing Solid Code ( http://www.cs.brown.edu/courses/cs190/2008/documents/restricted/Writing%20Solid%20Code.pdf ), която дава някои съвети и напътствия как е добре да се пише на С. Писана е от микромек, и то доста отдавна, но е добра :)

Активен

"Minds are like parachutes. They only function when they are open." - James Dewar

irc.freenode.net  / #linux-bg