LINUX.ORG.RU

Только начинаю изучать Язык Си...

 ,


1

2

В общем начал изучать C по книге K&R. В общем задача вывести символы ввода в выходной поток. Для себя немного модифицировал задачу, чтобы при выводе символы проверялись на == ';', и если условие совпадает, то сделать перевод строки. В общем то работает, но блин на выходе вместо содержимого файла пишет кучу цифр. Вот код:

#include <stdio.h>

main ()
{
    int c;

    while ((c = getchar()) != EOF)
	if (c == ';')
            printf ("%d\n", c);
        else
	    printf ("%d", c);
}

Ответ на: комментарий от qulinxao

Для ценителей, имхо.

Мне, например, было интересно ознакомиться.

Twissel ★★★★★
()
Ответ на: комментарий от anonymous

С.Кочан (2007)

У него ещё в 2014 году обновление книги вышло, где стандарт Си11 затрагивается. На русском пока не выходила.

А так да, K&R сами в предисловии пишут, что книга для знакомых с программированием, хоть и написана достаточно понятно.

grem ★★★★★
()

Для чего тебе нужен язык С? Кем ты себя видишь через пять лет?

Только серьезно.

LongLiveUbuntu ★★★★★
()
Ответ на: комментарий от qulinxao

Но сейчас-то это не работает и с этими типами в си сейчас анальная боль. Как и твой пример выше с принтфом.

registrant27492
()
Ответ на: комментарий от qulinxao

Не познал, если честно. auto в С — это же объявление переменной не-static? Т.е. тип не указан, стало быть, эти «auto adx[], x, c;» друзья умолчательно int? Но при этом x как поинтер??

Deleted
()
Ответ на: комментарий от Deleted

Не познал, если честно.

Да и не должен понять. Не знаю каких хреном он связал это с рекурсией.

Но при этом x как поинтер??

Он там как значение - значением может быть и адрес. Считай это intptr_t.

А как поинтер - он не используется нигде - как поинтер используются поинтеры(s, adx, fmt), только через скобочки, а не через звёздочку.

registrant27492
()
Ответ на: комментарий от qulinxao

Да нет. Просто ты наделил это хрен пойми откуда взявшимся смыслом.

registrant27492
()

%d

пишет кучу цифр

Странно. Должна быть арабская вязь.

Valkeru ★★★★
()
Ответ на: комментарий от anonymous

Книга K&R должна быть 2 или 3й по счету, никак не первой

Чё за бред, успешно прочитал её за один день без всякого опыта программирования. Книжка эта образец как надо оформлять книги. Всё расжёвано последовательно с множеством примеров. А многие другие книги либо сокращённый и с опечатками пересказ стандарта либо написаны таким языком что создаётся ощущение что они ориентированы на ясельную группу детского сада.

iluha16
()

Код в функции printf интерпретирует последовательность битов сохранённую в переменной c как число. Замените printf(«%d», c); на printf(«%c», c); или вообще putchar(c);

iluha16
()

Очишуеть, какую бурю вызвал вопрос моей невнимательности. Спасибо всем за советы и полезные ссылки(все прочитал). На вопрос о том, зачем мне C, отвечу, для себя, писать что-то под *nix. Про man знаю не по наслышке, просто в этот раз я тупо прошляпил. В дальнейшем буду более внимательным. Задачи в K&R действительно надо решать заглядывая вперед книги на несколько глав, хотя ни ссылок на эти моменты ни комментариев по тексту нет. В целом описывается довольно доступным языком. Опыт «программирования» был на практически всеми нелюбимом, но от того не менее популярном PHP, поэтому понимание основ затруднений не вызывает, если не торговать лицом )))) Еще раз всем спасибо :)

soulectro
() автор топика
Ответ на: комментарий от soulectro

Задачи в K&R действительно надо решать заглядывая вперед книги на несколько глав

Для решения примеров в КР достаточно пройденного на тот момент материала, никуда вперёд заглядывать не нужно.

grem ★★★★★
()
Ответ на: комментарий от menangen

все пишут на Go

Только дебильные гуглофаны! Нормальные люди этим дерьмищем не пользуются!!!

anonymous
()
Ответ на: комментарий от zl0y

GDB

15 лет пишу велосипеды на сишечке, и ни разу не возникало надобности в gdb!

Я и мелкоконтроллеры безо всяких этих ваших st-link'ов шью…

anonymous
()
Ответ на: комментарий от Aswed

Иди в жопу!

Я и сам офигел: есть у меня одна машинка с хрюникодом (там лубунта стоит, т.к. нужно было за полдня поставить, настроить и запустить свой сервис, поэтому решил, что проще дерьма нажраться). Проверил. Работает. Ну нифига ж себе! Как???

anonymous
()
Ответ на: комментарий от anonymous

Ты 15 лет пишешь на сишечке, а так и не в курсе как устроен UTF-8?

mix_mix ★★★★★
()
Ответ на: комментарий от anonymous

Как???

Если ты серьезно, а не вяло троллишь, то UTF для совместимости с однобайтными кодировками и проектировался. Почитай же википедию

JaneDoe
()
Ответ на: комментарий от JaneDoe

UTF для совместимости с однобайтными кодировками и проектировался

Угу. Расскажи мне, как strlen(«строка») может быть в хрюникоде равна шести?

anonymous
()
Ответ на: комментарий от menangen

Ардуинчиками

Чуть не сблевал!

anonymous
()
Ответ на: комментарий от menangen

Кстати, что за чмо у тебя на аве?

anonymous
()
Ответ на: комментарий от anonymous

Нет. Я же не сказочник. Она равна 12. И, собственно, зачем ей быть равной 6? strlen отлично выдает размер блока памяти, необходимого для хранения строки. Но да, чудес не бывает. Нужно количество многбайтных символов - используй wcslen.

JaneDoe
()
Ответ на: комментарий от anonymous

Эдик хотел кинуть говном в юникод, а попал в себя. Для работы с юникодом есть wchar.h и wctype.h в СТАНДАРТНОЙ БИБЛИОТЕКЕ. Те у кого прямые руки используют его, а те у кого кривые пишут тут «ко-ко-ко, мои любимые strlen не работают с юникодом, что же делать?!?!?! Он такой плохой!»

Aswed ★★★★★
()
Ответ на: комментарий от Aswed

У нормальных людей для выделения под строку из N букв места нужно просто сделать malloc(N+1)! А у идиотов нужно считать, сколько же там байт...

anonymous
()
Ответ на: комментарий от anonymous

На практике ситуации в которых нужно считать длину utf-8 строки встречаются не часто.

iluha16
()
Ответ на: комментарий от anonymous

У нормальных людей для выделения под строку из N букв места нужно просто сделать malloc(N+1)! А у идиотов нужно считать, сколько же там байт...

У нормальных людей размер строки в байтах лежит рядом с указателем на данные, а вот у идиотов...

anonymous
()
Ответ на: комментарий от anonymous

Начнем с того, что нормальные люди не пихают С везде только потому, что это единственное что они знают. Нормальные люди изучают разные средства и адаптируются, а не объявляют ересью все с чем не справились. А конкретно в данном вопросе нормальные люди доверяют машине посчитать сколько байт там нужно, а не кричат: «Только N+1!». Однобайтовые кодировки устарели. И ты устареешь, если будешь цепляться за прошлое и кричать всему новому «Ересь!». Если, конечно, ты уже не устарел.

Aswed ★★★★★
()
Ответ на: комментарий от Aswed

И ты устареешь

Да насрать!

Я лучше дворником буду работать, чем прогибаться под эту ересь новомодную!!! Ты еще скажи, что можно бубунту в качестве операционной системы использовать, а документы и презентации в опенохфисе верстать, а не в латехе!..

anonymous
()
Ответ на: комментарий от anonymous

Да насрать!
Я лучше дворником буду работать, чем прогибаться под эту ересь новомодную!!!

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

Aswed ★★★★★
()
Ответ на: комментарий от Aswed

Начнем с того, что нормальные люди не пихают С везде только потому, что это единственное что они знают.

Проблема в том, что си может всё, а недоязычки не могут ничего. Поэтому нет никаких причин для того, чтобы не использовать С, либо если так припёрло С++ везде, ибо в любом случае они лучше и мощнее любых других куллязычков.

Нормальные люди изучают разные средства и адаптируются, а не объявляют ересью все с чем не справились.

Убогая подмена понятий. Изучать что-то новое и использовать новый интерфейс - это совершенно разные вещи. И в маразм о котором ты выше балаболил - ты уйдёшь от этого так же быстро, как ничего не делая «нового».

Для реализации чего-то на си в любом случае требуется понимания куда большего, чем на недоязчке и то, что оно написано на одном и том же языке - из этого ничего не следует. Любое новое - оно новое и абсолютно не важно какое «старое» требовалось для его создания.

А конкретно в данном вопросе нормальные люди доверяют машине посчитать сколько байт там нужно

Нет - не нормальные, а лсные. Естественно взяв готовое говно и считалку, которую сделали за тебя - очень просто кукарекать о том, что можно позвать считалку. Естественно да - ты станешь маразматиком лет в 50+, но кого это волнует.

Ну и так же, когда к качеству реализации никаких требований не предоставляется и прокатывает любое дерьмо с оправданиями «я не смог нормально, ибо нормально не модно».

Однобайтовые кодировки устарели.

Причём тут однобайтовые? Наглое враньё и подмена понятий - тебе говорят про динамическое кодирование - оно не даёт посчитать нормально длину, а не её «однобайтовость».

И ты устареешь, если будешь цепляться за прошлое и кричать всему новому «Ересь!».

Ты нихрена не понимаешь в теме. Устарело как раз-таки динамическое кодирование.

Если, конечно, ты уже не устарел.

Он устарел ровно настолько же, насколько и ты.

registrant27492
()
Ответ на: комментарий от anonymous

Всё просто - динамически в утф8 кодируются только символы не из ascii и длинна любой последовательности кратна байту, поэтому там спокойно ищутся любые ascii символы побайтовыми искалками.

registrant27492
()
Ответ на: комментарий от Aswed

а насколько устарели те взгляды на которые моя реплика?

ты уже готов проявить нейропластичность и отказаться от своих устаревших и только что высказанных взглядов в пользу признания того что ты знаешь устаревшее и что важнее ложные представления о. ?

qulinxao ★★☆
()
Ответ на: комментарий от registrant27492

Естественно взяв готовое говно и считалку

а ты проц сам из кремния выточил и дорожки протравил или всёж взял готовое ... ?

qulinxao ★★☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.