Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

Вопрос по C++

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Компилируемые языки] >> Вопрос по C++
Имя
Сообщение << Старые топики   Новые топики >>
Вопрос по C++ - 2007-05-06 19:38:40.076666   
sinker

Сообщений: 134
Оценки: 0
Присоединился: 2007-01-08 21:55:33.930000
Пусть в файле есть чила:
1 2 3 4 5
5 6 7
8 9 10 11
Как считать из первой строки 1 число, со второй - 2, с третьей - 3 и т.д.?
Post #: 1
RE: Вопрос по C++ - 2007-05-06 20:55:40.383333   
voody

Сообщений: 958
Оценки: 0
Присоединился: 2005-02-06 22:28:30
Для начала, сказал бы, где пишешь и какие технологии используешь (MFC/VCL/.NET/обычный WinAPI)? Если брать последний вариант (он более универсальный) - то, можешь использовать функцию sscanf, входящую в заголовочный файл stdio.h, который есть в каждом C/C++ компиляторе. Если же ты не знаешь, сколько точно чисел находится в строке - считай пробелы в цикле и вырезай то, что между ними находится.

P.S. Если интересно - вот подробное описание функции sscanf:

quote:

Header File

stdio.h

Category

Memory and String Manipulation Routines

Syntax

int sscanf(const char *buffer, const char *format[, address, …]);

int swscanf(const wchar_t *buffer, const wchar_t *format[, address, …]);

Description

Scans and formats input from a string.

Note: For details on format specifiers, see scanf.

sscanf scans a series of input fields, one character at a time, reading from a string. Then each field is formatted according to a format specifier passed to sscanf in the format string pointed to by format. Finally, sscanf stores the formatted input at an address passed to it as an argument following format. There must be the same number of format specifiers and addresses as there are input fields.

sscanf might stop scanning a particular field before it reaches the normal end-of-field (whitespace) character, or it might terminate entirely, for a number of reasons. See scanf for a discussion of possible causes.

Return Value

On success, sscanf returns the number of input fields successfully scanned, converted, and stored; the return value does not include scanned fields that were not stored.

If sscanf attempts to read at end-of-string, it returns EOF.

On error (If no fields were stored), it returns 0.
Post #: 2
RE: Вопрос по C++ - 2007-05-06 22:27:38.846666   
sinker

Сообщений: 134
Оценки: 0
Присоединился: 2007-01-08 21:55:33.930000
Пишу обычное консольное приложение.

А обычним cin>> нельзя? Меня интересует как перевески курсор на новую строку (как в Паскале readln).
Post #: 3
RE: Вопрос по C++ - 2007-05-07 03:17:19.030000   
voody

Сообщений: 958
Оценки: 0
Присоединился: 2005-02-06 22:28:30

quote:

ORIGINAL: sinker
Меня интересует как перевески курсор на новую строку (как в Паскале readln).

endl
Post #: 4
RE: Вопрос по C++ - 2007-05-07 07:10:08.240000   
sinker

Сообщений: 134
Оценки: 0
Присоединился: 2007-01-08 21:55:33.930000
В строке cin>>a[i-1]>>endl; возникает ошибка:

"D:\Microsoft Visual Studio\MyProjects\Masiv\MAIN.CPP(20) : error C2679: binary '>>' : no operator defined which takes a right-hand operand of type 'class ostream &(__cdecl *)(class ostream &)' (or there is no acceptable conversion)
Error executing cl.exe."
Post #: 5
RE: Вопрос по C++ - 2007-05-07 12:23:52.990000   
Knny

Сообщений: 5
Оценки: 0
Присоединился: 2007-05-07 12:00:59.486666
cin.get(максимальное число символов, разделитель)
я правда ни разу этим не пользовался
еще cin.getline() есть почитай в умных книжках!
Post #: 6
RE: Вопрос по C++ - 2007-05-07 14:36:21.560000   
voody

Сообщений: 958
Оценки: 0
Присоединился: 2005-02-06 22:28:30

quote:

ORIGINAL: sinker

В строке cin&gt;&gt;a[i-1]&gt;&gt;endl; возникает ошибка:

"D:\Microsoft Visual Studio\MyProjects\Masiv\MAIN.CPP(20) : error C2679: binary '&gt;&gt;' : no operator defined which takes a right-hand operand of type 'class ostream &(__cdecl *)(class ostream &)' (or there is no acceptable conversion)
Error executing cl.exe."

Я думал, тебе нужен перевод строки на выход, а не на вход. Короче, не парься и юзай обычный "\n".
Post #: 7
RE: Вопрос по C++ - 2007-05-07 14:48:41.883333   
~F@ntom~

Сообщений: 56
Оценки: 0
Присоединился: 2005-10-20 17:44:01
хм а непроще матрицей сделать, и ваще предлагаю раз уж там числа загнать все это дело в масив, причем выругай его динамическим, а там уже проще будет :).
Post #: 8
RE: Вопрос по C++ - 2007-05-07 19:08:58.113333   
ghost1k

Сообщений: 78
Оценки: 0
Присоединился: 2006-10-18 16:37:57.833333
см. хелп к функции gets. Юзаецца типа gets>>i;
Post #: 9
RE: Вопрос по C++ - 2007-05-07 22:59:00.540000   
sinker

Сообщений: 134
Оценки: 0
Присоединился: 2007-01-08 21:55:33.930000
А как просто прочитать только одно число в строке, а остальные отбросить (перейти на новую строку)?
Post #: 10
RE: Вопрос по C++ - 2007-05-08 14:30:06.806666   
BoWC__sMi1IK

Сообщений: 13
Оценки: 0
Присоединился: 2007-04-27 10:54:38.746666
интересно, как ты единственный и гениальный, который решил офигеть какую служную задачу на олимпиаде по кодингу страдаешь такой херней ; ))
читай в n-ой строчке до n-ого пробела, пока не EOF - что тут тяжелого то? :оО
перед этим смотришь, скока строчек в файле, выделяешь памяти на mas[n][n] :оО
Post #: 11
RE: Вопрос по C++ - 2007-05-08 19:03:01.660000   
sinker

Сообщений: 134
Оценки: 0
Присоединился: 2007-01-08 21:55:33.930000
ОЛИМПИАДА БЫЛА НА ЯЗЫКЕ ПАСКАЛЬ. А С++ я только начал учить
Post #: 12
RE: Вопрос по C++ - 2007-05-18 13:15:41.916666   
Webkill

Сообщений: 606
Оценки: 0
Присоединился: 2007-05-06 06:59:04.066666
quote:

&nbsp;&nbsp;ОЛИМПИАДА БЫЛА НА ЯЗЫКЕ ПАСКАЛЬ. А С++ я только начал учить

Какое место занял, я через пол года тоже на городскую алимпеаду по паскалю иду!
Post #: 13
RE: Вопрос по C++ - 2007-05-18 21:43:01.073333   
BoWC__sMi1IK

Сообщений: 13
Оценки: 0
Присоединился: 2007-04-27 10:54:38.746666
quote:

ORIGINAL: Webkill
алимпеаду


еще на АлимпЕаду по русскому загляни )
Post #: 14
RE: Вопрос по C++ - 2007-05-19 00:54:40.536666   
ВИТАХА

Сообщений: 1017
Оценки: 0
Присоединился: 2006-12-27 00:18:16.020000
quote:

А как просто прочитать только одно число в строке, а остальные отбросить (перейти на новую строку)?

Прочитать одно число можна зделав цыкл до первого пробела(минуя первые пробелы).А на щет как читать с разных строк так есть на сколько я помню что то типа eoln() функции посотри….ну и плюс первое то что уже было,между прочим на олимпиадках такое сплошь и рядом,всмысле считать из файла а потом что то зделать и т.д.
Post #: 15
RE: Вопрос по C++ - 2007-05-21 20:56:03.373333   
St0rcrafter

Сообщений: 78
Оценки: 0
Присоединился: 2007-05-21 20:36:10.756666
а не проще завести массив типа a[n][n] в первую строку массива из первой линии считать ввод, потом в цикле до eoln() считать все в какую-нить ненужную переменную, потом опять две в массив, остальное в хлам, и не забывай проверять на eof()
а то тут некоторые насоветовали пробелы считать, вырезать… прям парсинг какой-то Оо
Post #: 16
RE: Вопрос по C++ - 2007-05-21 23:12:48.913333   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
quote:

ORIGINAL: St0rcrafter

а то тут некоторые насоветовали пробелы считать, вырезать… прям парсинг какой-то Оо

ты это называешь парсингом? разбор xml ещё можно называть парсингом, там реально возникает необходимость конечном автомате, стеке и прочих вещах и теории. а здесь, всё делается в полпинка даже если и не подозреваешь о существовании всех этих теорий. замечу делается быстрее и эффективнее, нежели всякими scanf'ами, std::cin'ами и пр., тк:
1. не требуется считанную строку переводить в число, а потом обратно в строку (если первое – это сплошные умножения, то второе хуже – деления), для современного проца – это семечки, но… тут же не сказано в каком количестве придётся обрабатывать, и с какой скоростью будет возможно читать ввод;
2. на всё про всё понадобиться лишь три переменные: одна для хранения текущего символа, другая – номера строки, и третья номера числа в строке. соответственно, функцией разбора из стека откушается… где-то 3*4+8 байт. может чуть больше, но суть в том, что это константа не зависящая от n. читая числами а не char'ами тоже можно уложиться в константное число байт, но, первый пункт останется.
void do_line (int n) { int c = ' '; int i = 0; while (!feof (stdin) && c != '\n') { while ((c = fgetc (stdin)) == ' ') if (c == EOF || c == '\n') return; while (c != ' ' && c != '\n') { if (c == EOF) return; if (i == n) fputc (c, stdout); c = fgetc (stdin); } if (i == n) fputc ('\n', stdout); ++ i; } } void do_work () { int line; line = 0; while (!feof (stdin)) do_line (line ++); } замечу, что если взамен всего этого, завести булевскую переменную и сделать конечный автомат, то количество проверок на EOF, и '\n' сильно уменьшится. будет нечто в стиле:
while ((c = fgetc (stdin)) != EOF) { if (c == '\n') { ++ line; continue; } if (skipping_spaces) { if (c != ' ') skipping_spaces = false; } else { if (c != ' ') { if (i == line) fputc (c, stdout); } else { // переключаем состояние, тк текущее число закончилось if (i == line) fputc ('\n', stdout); skipping_spaces = true; ++ i; } } } что вы парсеров никогда не писали? неужто никогда не возникало желания написать свой собственный язык программирования? написать, например, свой ассемблер, заставить его скомпилировать себя, и решить наконец вопрос что же было раньше курица или яйцо – или, если без аллегорий: каким образом был скомпилирован первый компилятор языка C, написанный на C, когда ещё не было компиляторов языка C.

ps. кстати, глянул на второй пример, увидел баг… вероятно, в первом он тоже есть. скорее всего. ищите сами, если надо. ;)
Post #: 17
RE: Вопрос по C++ - 2007-05-23 11:44:39.933333   
Krik99

Сообщений: 197
Оценки: 0
Присоединился: 2007-04-07 13:13:31.816666
Подскажите мне , у меня когдато был компилятор для C++  ( Microsoft Visual Studio 6.0 ) какой проргой по проще можно её заменить? Чтобы эта прога занимала до 100мб…
А то очень хочу на Си чтонибуть под винду написать…  За ранние благодарен!!!:D
Post #: 18
RE: Вопрос по C++ - 2007-05-24 21:12:29.760000   
Krik99

Сообщений: 197
Оценки: 0
Присоединился: 2007-04-07 13:13:31.816666
Видать нет больше прог чтоб на Си чтонибуть под винду написать , кроме Microsoft Visual Studio 6.0  …[:(][:(][:(]
Post #: 19
RE: Вопрос по C++ - 2007-05-24 21:13:23.916666   
sinker

Сообщений: 134
Оценки: 0
Присоединился: 2007-01-08 21:55:33.930000
В Pascal-е с етим немного проще: read, readln :)
Post #: 20
RE: Вопрос по C++ - 2007-05-24 21:14:04.793333   
sinker

Сообщений: 134
Оценки: 0
Присоединился: 2007-01-08 21:55:33.930000
quote:

ORIGINAL: Krik99

Видать нет больше прог чтоб на Си чтонибуть под винду написать , кроме Microsoft Visual Studio 6.0&nbsp; …[:(][:(][:(]

Borland C++ Builder пробовал?
Post #: 21
RE: Вопрос по C++ - 2007-05-24 21:15:19.840000   
sinker

Сообщений: 134
Оценки: 0
Присоединился: 2007-01-08 21:55:33.930000
quote:

ORIGINAL: Krik99

Видать нет больше прог чтоб на Си чтонибуть под винду написать , кроме Microsoft Visual Studio 6.0&nbsp; …[:(][:(][:(]

Microsoft Visual Studio 6.0 - не прога а среда разработки
Post #: 22
Страниц:  [1]
Все форумы >> [Компилируемые языки] >> Вопрос по C++







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.