TheDeadSkin #9181 18 мая 2015 (изменено) ты засунул ласт строку внутрь цикла чтоли? в общем строка "я у е" у тебя прочиталась правильно и лежит полностью в переменной s, \0 стоит корректно, тоесть cin.getline() работает как положенотак что ищи проблему в другом Изменено 18 мая 2015 пользователем TheDeadSkin Поделиться сообщением Ссылка на сообщение
prostoYaKrytoy #9182 18 мая 2015 кютхамстерчто на экзамене будет у вас?) Поделиться сообщением Ссылка на сообщение
cutehamster #9183 18 мая 2015 Я так понял, что у меня проблема с вводом n. Только нихуя не пойму че тут не правильного то. бтв размер строки должен вводиться с клавиатуры, значит массив должен быть динамическим. так?а я если ввожу размер, то у меня выводится сообщение "Введите строку: ", потом перенос строки (т.е. пустая строка) и всё.еще раз репощу код int n; cout << "Введите размер строки: ";cin >> n; char *s=new char[n]; cout << "Введите строку: " << endl; cin.getline(s, n-1); for (int i=0; i < n-1; i++) { if (s[i] == -17) s[i] = -87; if (s[i] == -29) s[i] = -18; if (s[i] == -91) s[i] = -88; } cout << s; delete[]s; У нас на экзамене будут вопросы по пройденным лабам: массивы: динамические, статические, двумерные, функции, строки, препроцессоры и структуры. Я вообще хочу автомат, но одногруппники говорят, что эта сука (препод) решила никому не ставить автомат, вроде как . Но это пиздец. У меня 5 экзаменов тогда будет, с перерывом в 2-3 дня. :fffuuu: у тебя тоже экзамен будет? Поделиться сообщением Ссылка на сообщение
KaRniZZZ #9184 18 мая 2015 cutehamster, учись пользоваться дебаггером, в котором все становится ясно. Да и такую ошибку ты уже ранее вбрасывал сюда, но офк все забыл.В твоем случае после форматированного ввода int n; cin >> n; cin считывает только число, а знак перехода на новую строку остается в потоке. Его и считывает cin.getline ^ↀᴥↀ^ Поделиться сообщением Ссылка на сообщение
cutehamster #9185 18 мая 2015 (изменено) Если я правильно понял, то в кодблоксе в дебаггере должно вывестись вот это: Building to ensure sources are up-to-date Selecting target: Debug Adding source dir: C:\Users\redde_000\Desktop\ПОГРОМИРОВАНИЕ\лаба8\ Adding source dir: C:\Users\redde_000\Desktop\ПОГРОМИРОВАНИЕ\лаба8\ Adding file: C:\Users\redde_000\Desktop\ПОГРОМИРОВАНИЕ\лаба8\bin\Debug\лаба8.exe Changing directory to: C:/Users/redde_000/Desktop/ПОГРОМИРОВАНИЕ/лаба8/. Set variable: PATH=.;C:\Program Files (x86)\CodeBlocks\MinGW\bin;C:\Program Files (x86)\CodeBlocks\MinGW;C:\ProgramData\Oracle\Java\javapath;C:\Windows\System32;C:\Windows;C:\Windows\System32\wbem;C:\Windows\System32\WindowsPowerShell\v1.0;C:\Program Files\Microsoft SQL Server\110\Tools\Binn;C:\Program Files (x86)\Microsoft SDKs\TypeScript\1.0;C:\Program Files\Microsoft SQL Server\120\Tools\Binn;C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit;C:\Program Files (x86)\Skype\Phone;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common Starting debugger: C:\Program Files (x86)\CodeBlocks\MINGW\bin\gdb.exe -nx -fullname -quiet -args C:/Users/redde_000/Desktop/ПОГРОМИРОВАНИЕ/лаба8/bin/Debug/лаба8.exe done Registered new type: wxString Registered new type: STL String Registered new type: STL Vector Setting breakpoints Debugger name and version: GNU gdb (GDB) 7.5 No source file named C:/Users/redde_000/Desktop/ПОГРОМРР РћР’РђРќРР•/лаба8/heh.cpp. Temporary breakpoint 2 ("C:/Users/redde_000/Desktop/ПОГРОМРР РћР’РђРќРР•/лаба8/heh.cpp:20") pending. Child process PID: 38512 [inferior 1 (process 38512) exited normally] Debugger finished with status 0 но что из этого я должен понять?) куда именно смотреть? и да, что значит "знак перехода на новую строку остается в потоке"? нихуя не понял. что именно нужно изменить? Изменено 18 мая 2015 пользователем cutehamster Поделиться сообщением Ссылка на сообщение
TheDeadSkin #9186 18 мая 2015 так вот что он имеел ввиду по-поводу игнорить, что с консоли ему даже не даёт ввестиа вообще такой вариант ему подойдёт? scanf("%d\n", n); типа добавить перенос в спек строки на сканф, я просто хз как это всё дерьмо типа cin работаетпо идее ему должно поможчь сбросить остаток ввода, типа cin >> n;while (getch() != '\n') ; Поделиться сообщением Ссылка на сообщение
cutehamster #9187 18 мая 2015 Всё хорошо, вот только у меня же на выводе текст на русском, и поэтому использую setlocale()но сейчас при вводе "я у е" у меня выводятся кракозябры, как если бы не включил setlocale(). Без него всё ок, но в cout нет русского тогдаче делать? Поделиться сообщением Ссылка на сообщение
TheDeadSkin #9188 18 мая 2015 всё хорошо = что именно ты сделал? Поделиться сообщением Ссылка на сообщение
TheDeadSkin #9190 18 мая 2015 ну попробуй второй вариантscanf - сишное, cin - в либах с++возможно реализация setlocale в плюсах забила хуй на совместимость со сканф и оно читает хуйню Поделиться сообщением Ссылка на сообщение
cutehamster #9191 18 мая 2015 Лол, со вторым методом при вводе cin.getline() у меня просто ниче не нажимается . И да, тут ошибка с кодировкой скорее в setlocale или еще чем то. Ну да ладно, похуй. Буду по-английски писать.Спасибо всем огромное еще раз) Поделиться сообщением Ссылка на сообщение
TheDeadSkin #9192 18 мая 2015 Лол, со вторым методом при вводе cin.getline() у меня просто ниче не нажимается .попробуй getch заменить на getchar Поделиться сообщением Ссылка на сообщение
KaRniZZZ #9193 18 мая 2015 (изменено) cin.ignore(); добавь после cin >> n; эта команда пропускает следующий символ в потоке Изменено 18 мая 2015 пользователем KaRniZZZ ^ↀᴥↀ^ Поделиться сообщением Ссылка на сообщение
cutehamster #9194 18 мая 2015 И да, объясните пожалуйста, почему у меня просит ввести сразу размер и саму строку, и потом только сообщение с вводом строки и результат? int n; cout << "ввод размера: "; scanf("%d\n", &n); char *s=new char[n]; cout << "Ввод строки: " << endl; cin.getline(s, n-1); for (int i=0; i < n-1; i++) { if (s[i] == -17) s[i] = -87; if (s[i] == -29) s[i] = -18; if (s[i] == -91) s[i] = -88; } cout << s; delete[]s; return 0; cin.ignore(); добавь после cin >> n; эта команда пропускает следующий символ в потокездесь тоже заработало, так же как и в прошлом способе. спасибо. Поделиться сообщением Ссылка на сообщение
TheDeadSkin #9195 18 мая 2015 cin.ignore(); добавь после cin >> n; эта команда пропускает следующий символ в потокесекунду назад нагуглил эту же хуйню так чтоcin >> n;cin.ignore(); И да, объясните пожалуйста, почему у меня просит ввести сразу размер и саму строку, и потом только сообщение с вводом строки и результат?90% что тоже побочный эффект сканф, так что выкинь его к чертямв с++ лучше юзать функции плюсов, а не си Поделиться сообщением Ссылка на сообщение
cutehamster #9196 18 мая 2015 И да, объясните пожалуйста, почему у меня просит ввести сразу размер и саму строку, и потом только сообщение с вводом строки и результат?90% что тоже побочный эффект сканф, так что выкинь его к чертямв с++ лучше юзать функции плюсов, а не сис cin.ignore() та же хуйня) Поделиться сообщением Ссылка на сообщение
prostoYaKrytoy #9197 18 мая 2015 scanf("%d\n", n);это нет, уже пройденный этап. сдавал 5 экзов с интервалом в 3 дня, нормально, справишься )) Поделиться сообщением Ссылка на сообщение
cutehamster #9198 18 мая 2015 (изменено) у меня в первом семестре тоже самое было. в то время как у друзей в этом универе, но в других инстах по 3-4 экзамена =)жопа норм горела а ты сам откуда, где и на какой специальности учился? Изменено 18 мая 2015 пользователем cutehamster Поделиться сообщением Ссылка на сообщение
prostoYaKrytoy #9200 18 мая 2015 у меня в первом семестре тоже самое было. в то время как у друзей в этом универе, но в других инстах по 3-4 экзамена =)жопа норм горела а ты сам откуда, где и на какой специальности учился?прикладная инф. в экономике я учусь ещё, на 3) Поделиться сообщением Ссылка на сообщение