philosoff's.community.forum

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » philosoff's.community.forum » Учеба и ВМК. » Прак, задание №1


Прак, задание №1

Сообщений 1 страница 19 из 19

1

На что хочу обратить ваше внимание:
1) getchar вводит с буферизацией. Это значит, что сначала ваш ввод накапливается, можете его бэкспейсом редактировать. А в программу он попадет только, когда enter нажмете.
2) Функция isdigit проверяет, а не цифра ли указанный символ. Работает во всех кодировках, даже в тех, где цифры идут не подряд, если эта кодировка выставлена как системная, разумеется.
3) Пожалуйста, не надо тупо копировать мой пример, пишите сами.
4) Точно работает под gentoo linux

Код:
#include <strings.h>
#include <stdio.h>

int main (int argc, char** argv)
{
	int prev = getchar(), tec = getchar();
	if (prev == '\n') return 0;
	int csl;
	char str[2]={0, 0};

	for (csl=0; tec != '\n'; prev=tec, tec=getchar()){
  if (!csl && prev == '0' && isdigit(tec)){
  	continue;
  	csl = 0;
  }
  csl=isdigit((char)prev)||(char)prev=='.';
  putchar (prev);
	}

	putchar (prev);
	return 0;
}

Отредактировано DiMan (2006-09-14 23:32:48)

0

2

:idol:  :idol:  :idol:
гусь рулит
вот он лучше того аспера (или кто он там, ну, который у нас прак до сегодняшнего дня вел) мог бы нам си преподавать

0

3

Да, Лёха крут. Я пока сегодня только "Hello, world!" удосужился написать...

Вообще, предлагаю в этой теме публиковать и обсуждать все варианты 1-го задания по практикуму, а не только 3-ий.

Отредактировано DiMan (2006-09-14 23:30:40)

0

4

Ну я все-таки С уже лет 5 изучаюю.
Вот только я свой винчестер угробил, так что писать другие варианты не собираюсь, хотя этот переделать в остальные не сложно. Есть небольшая вероятность, что я еще 1ый вариант опубликую.

0

5

Да, Лёх, ещё добавь, пожалуйста, условие 3-го варианта.

0

6

Из строки удалять все незначащие лидирующие нули в группах цифр. Перед . надо 0 оставлять. Если в группе цифр только 0 то оставить один.

0

7

Народ, кто знает, как очистить буфер ввода? А то не получается сделать запрос "Ввести новую строку? Y/N" при использовании getchar, если пользователь после точки введёт ещё какой-нибудь текст (особенно, ели этот текст включает "Y" или "N"), поскольку getchar автоматически хватает символ из буфера... :(

0

8

Мы теперь пишем программы в стиле unix. Единственная программа, спрашивающая о повторении, которую я встречал - adduser под freeBSD. Если пользователю надо, скрипт напишет.
В спецификации строго написано, что на входе, что на выходе. Нарушив спецификацию таким образом ты сделаешь затруднительным использование твоей программы в скриптах и в связках программ через пайпы.
Например я могу сделать:
mysqldump -u root -p my_base | grep balance | myprog
На выходе получу данные о балансе с нормальными цифрами без лидирующих нулей (правда мускуль их и так без лидирующих нулей дает)
А с реализацией спрашивающей повторение прийдется еще с седом шаманить.
А хочешь мощно работать с консолью, копай в сторону curses.

0

9

А с реализацией, спрашивающей повторение, придется еще с седом шаманить.

:cool: А я порылся в интернете и нашёл выход. На самом деле, всё оказалось намного проще и красивее: проблема решается вставкой в код вот такой нехитрой строчки:

Код:
while (getc(stdin) != '\n');

Функция getc() читает char'ы из потока, stdin отвечает за буфер, и чтение циклится до тех пор, пока в буфере не закончится строка - проверяем это с помощью '\n'...

Отредактировано DiMan (2006-09-17 21:48:33)

0

10

Теперь у меня новая запара (ну, люблю я красиво оформлять свои программы): есть ли какой нибудь аналог gotoxy(x,y) в С? Вроде gotoxy работает только в Borland C, а у меня Dev-C++...

Отредактировано DiMan (2006-09-17 22:42:32)

0

11

Есть. Надо исользовать библиотеку curses. Там даже понятие окон в текстовом режиме есть.
Вот только поставь себе сначала unix систему, чтобы иметь все эти прелести.

0

12

охренеть, ребята, вы очень умны...

А у меня есть версия FreeBSD 4.8 :panti: и я собираюсь её себе поставить с помощью мануала с http://www.freebsd.org/ru!!! За подсказку спасибо Лёхе.  :D

ЗЫ. Написал свой вариант в Microsoft Visual Studio на С++. Он пишет, что ошибок нет, компилится, а exe-шник строить отказывается. Я теперь на него дуюсь :angry:

)))

0

13

Код:
while (getc(stdin) != '\n');

Что-у меня программа начала глючить после использования этой строчки (см. описание выше в теме). А, может, это просто из-за того, что где-нибудь что-нибудь не обнулил перед новой итерацией программы... Так что здесь надо быть осторожным...

0

14

Заранее извиняюсь за ламерский (с точки зрения юниксоидов) вопрос. В машзале редактор сможет открыть файл с расширенем .срр? По идее, должен, но очень не хочется завтра случайно пролететь со сдачей программы...

0

15

Дима, он откроет тот файл, который ты его попросишь.

0

16

Надо обязательно завтро сдать прогу?  :o

0

17

Я и сам не знаю. Но у меня уже, в принципе, "сдавабельная" прога...

0

18

Но у меня уже, в принципе, "сдавабельная" прога...

Да я не сомневаюсь...
Ну ладно, если чо, в окне напишу.

0

19

Код:
while (getc(stdin) != '\n');

Что-у меня программа начала глючить после использования этой строчки (см. описание выше в теме). А, может, это просто из-за того, что где-нибудь что-нибудь не обнулил перед новой итерацией программы... Так что здесь надо быть осторожным...

И все-таки она работает! :ok:  Всё дело было в моей криворукости (долго искал баг, пока не понял, что очищаю буфер до запроса на Y/N; из-за этого счётчик сбивался на единичку и обработка шла немного неправильно)...

0


Вы здесь » philosoff's.community.forum » Учеба и ВМК. » Прак, задание №1