Перейти к публикации
  • Сейчас на странице   Всего пользователей: 0   (0 пользователей, 0 гостей)

Hed-kun

Программирование, т. 5.1.

Рекомендованные сообщения

(изменено)

ты засунул ласт строку внутрь цикла чтоли? :trollface:

в общем строка "я у е" у тебя прочиталась правильно и лежит полностью в переменной s, \0 стоит корректно, тоесть cin.getline() работает как положено

так что ищи проблему в другом


Изменено пользователем TheDeadSkin

Поделиться сообщением


Ссылка на сообщение

кютхамстер

что на экзамене будет у вас?)


 

4Ht5T.jpg

 

8FegEdj.jpg

Поделиться сообщением


Ссылка на сообщение

Я так понял, что у меня проблема с вводом 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;

 

У нас на экзамене будут вопросы по пройденным лабам: массивы: динамические, статические, двумерные, функции, строки, препроцессоры и структуры. Я вообще хочу автомат, но одногруппники говорят, что эта сука (препод) решила никому не ставить автомат, вроде как :fffuuu: . Но это пиздец. У меня 5 экзаменов тогда будет, с перерывом в 2-3 дня. :fffuuu: :fffuuu:

 

у тебя тоже экзамен будет?

Поделиться сообщением


Ссылка на сообщение

cutehamster, учись пользоваться дебаггером, в котором все становится ясно. Да и такую ошибку ты уже ранее вбрасывал сюда, но офк все забыл.

В твоем случае после форматированного ввода

 

int n;
cin >> n;

 

cin считывает только число, а знак перехода на новую строку остается в потоке. Его и считывает cin.getline


^ↀᴥↀ^

OblongCarelessKitfox.gif

Поделиться сообщением


Ссылка на сообщение
(изменено)

Если я правильно понял, то в кодблоксе в дебаггере должно вывестись вот это:

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

но что из этого я должен понять?) куда именно смотреть?

 

и да, что значит "знак перехода на новую строку остается в потоке"? нихуя не понял. что именно нужно изменить?


Изменено пользователем cutehamster

Поделиться сообщением


Ссылка на сообщение

так вот что он имеел ввиду по-поводу игнорить, что с консоли ему даже не даёт ввести

а вообще такой вариант ему подойдёт?

 

scanf("%d\n", n);

 

типа добавить перенос в спек строки на сканф, я просто хз как это всё дерьмо типа cin работает

по идее ему должно поможчь сбросить остаток ввода, типа

 

cin >> n;

while (getch() != '\n') ;

Поделиться сообщением


Ссылка на сообщение

Всё хорошо, вот только у меня же на выводе текст на русском, и поэтому использую setlocale()

но сейчас при вводе "я у е" у меня выводятся кракозябры, как если бы не включил setlocale(). Без него всё ок, но в cout нет русского тогда

че делать?

Поделиться сообщением


Ссылка на сообщение

всё хорошо = что именно ты сделал?

Поделиться сообщением


Ссылка на сообщение

scanf("%d\n", n);

это :trollface:

Поделиться сообщением


Ссылка на сообщение

ну попробуй второй вариант

scanf - сишное, cin - в либах с++

возможно реализация setlocale в плюсах забила хуй на совместимость со сканф и оно читает хуйню

Поделиться сообщением


Ссылка на сообщение

Лол, со вторым методом при вводе cin.getline() у меня просто ниче не нажимается :trollface: .

И да, тут ошибка с кодировкой скорее в setlocale или еще чем то. Ну да ладно, похуй. Буду по-английски писать.

Спасибо всем огромное еще раз)

Поделиться сообщением


Ссылка на сообщение

Лол, со вторым методом при вводе cin.getline() у меня просто ниче не нажимается :trollface: .

попробуй getch заменить на getchar

Поделиться сообщением


Ссылка на сообщение
(изменено)

cin.ignore(); добавь после cin >> n;

 

эта команда пропускает следующий символ в потоке


Изменено пользователем KaRniZZZ

^ↀᴥↀ^

OblongCarelessKitfox.gif

Поделиться сообщением


Ссылка на сообщение

И да, объясните пожалуйста, почему у меня просит ввести сразу размер и саму строку, и потом только сообщение с вводом строки и результат?

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;

 

эта команда пропускает следующий символ в потоке

здесь тоже заработало, так же как и в прошлом способе. спасибо.

Поделиться сообщением


Ссылка на сообщение

cin.ignore(); добавь после cin >> n;

 

эта команда пропускает следующий символ в потоке

секунду назад нагуглил эту же хуйню

 

так что

cin >> n;

cin.ignore();

 

И да, объясните пожалуйста, почему у меня просит ввести сразу размер и саму строку, и потом только сообщение с вводом строки и результат?

90% что тоже побочный эффект сканф, так что выкинь его к чертям

в с++ лучше юзать функции плюсов, а не си

Поделиться сообщением


Ссылка на сообщение

И да, объясните пожалуйста, почему у меня просит ввести сразу размер и саму строку, и потом только сообщение с вводом строки и результат?

90% что тоже побочный эффект сканф, так что выкинь его к чертям

в с++ лучше юзать функции плюсов, а не си

с cin.ignore() та же хуйня)

Поделиться сообщением


Ссылка на сообщение

scanf("%d\n", n);

это :trollface:

нет, уже пройденный этап.

сдавал 5 экзов с интервалом в 3 дня, нормально, справишься ))


 

4Ht5T.jpg

 

8FegEdj.jpg

Поделиться сообщением


Ссылка на сообщение
(изменено)

у меня в первом семестре тоже самое было. в то время как у друзей в этом универе, но в других инстах по 3-4 экзамена =)

жопа норм горела

 

а ты сам откуда, где и на какой специальности учился?


Изменено пользователем cutehamster

Поделиться сообщением


Ссылка на сообщение
photo-154987.png?_r=1431254980

Поделиться сообщением


Ссылка на сообщение

у меня в первом семестре тоже самое было. в то время как у друзей в этом универе, но в других инстах по 3-4 экзамена =)

жопа норм горела

 

а ты сам откуда, где и на какой специальности учился?

прикладная инф. в экономике

я учусь ещё, на 3)


 

4Ht5T.jpg

 

8FegEdj.jpg

Поделиться сообщением


Ссылка на сообщение
Гость
Эта тема закрыта для публикации сообщений.

×
×
  • Создать...