0 / 0 / 0
Регистрация: 27.06.2017
Сообщений: 37
|
||||||
1 | ||||||
Программа аварийно завершается после оператора scanf27.06.2017, 11:24. Показов 2115. Ответов 18
Метки нет (Все метки)
Такая проблема.
Я начинающий. Занимаюсь уже вторую неделю. Написал такой код, запускаю программа. Все хорошо, но стоит дойти программе до операции ввода scanf , она тут же аварийно завершается, т.е. выводится окно завершения программы и поиска решения проблемы.
До этого стоял оператор CIN >>. Но он не принимал строку, а только присваивал approve одну букву "s". Причем неважно, ввел ты no или yes. При этом почему то выполнялись обе функции и yes: и no:.
0
|
27.06.2017, 11:24 | |
Ответы с готовыми решениями:
18
Программа аварийно завершается программа завершается аварийно Рекурсия, почему программа завершается аварийно? Программа на других компьютерах завершается аварийно |
7792 / 6559 / 2984
Регистрация: 14.04.2014
Сообщений: 28,668
|
|
27.06.2017, 11:30 | 2 |
%s подразумевает строку, а не один символ.
0
|
0 / 0 / 0
Регистрация: 27.06.2017
Сообщений: 37
|
|
27.06.2017, 11:34 [ТС] | 3 |
я вводу либо "yes" либо "no". Могу ввести просто "y" или "n". Чтобы я не ввел, программа завершается.
0
|
7792 / 6559 / 2984
Регистрация: 14.04.2014
Сообщений: 28,668
|
|
27.06.2017, 11:38 | 4 |
Ну если просто буква, то тогда и спецификатор используй для буквы - %c, а для получения результата должен быть передан указатель на приёмник, а не значение как у тебя.
0
|
Форумчанин
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
|
|
27.06.2017, 12:13 | 6 |
Попытка записать в символ строку. Добро пожаловать в мир Си. Поэтому в С++ придумали операторы std::cin и std::cout. Используйте их.
присваивание (сравнение делается через ==) в char multi-character constant. Для строк используйте std::string.
1
|
0 / 0 / 0
Регистрация: 27.06.2017
Сообщений: 37
|
|||||||||||
27.06.2017, 12:32 [ТС] | 7 | ||||||||||
Проблема решилась. Я измениk на cout. Теперь работает. Но работает если ввести один символ, или Y или N. Как сделать так, чтобы approve принимал целое слово и условие IF (approve=='yes') выполнялось?
Кстати. Я так и не понял почему оператор
П.С. Да этого я работал в basic. И там такой жесткости не было. Там вообще было пофиг, что будет содержать строковая переменная и какой она будет длины. Поэтому здесь у меня небольшой слом мозга.
0
|
Любитель чаепитий
|
|
27.06.2017, 12:34 | 8 |
плейсхолдер
s означает, что там будет строка, а строка это всё, что 1 или более символов.и ещё передавать в scanf надо по указателю, иначе переменная не изменится.
0
|
0 / 0 / 0
Регистрация: 27.06.2017
Сообщений: 37
|
|
27.06.2017, 12:36 [ТС] | 9 |
что такое указатель? И как он влияет на переменную?
0
|
5871 / 4748 / 2940
Регистрация: 20.04.2015
Сообщений: 8,361
|
||||||
27.06.2017, 12:39 | 10 | |||||
0
|
Любитель чаепитий
|
|
27.06.2017, 12:41 | 11 |
переменная, хранящая адрес другой переменной, либо
nullptr , либо мусор.если ты передаешь просто так, то как scanf узнает, какую переменную надо менять?если передаешь по указателю, то она использует хранящийся в указателе адрес для того, чтобы записать по этому адресу введенное тобою значение. в scanf можно передавать переменные с помощью оператора взятия адреса, в твоем случае: scanf("%c", &approve); .
0
|
0 / 0 / 0
Регистрация: 27.06.2017
Сообщений: 37
|
|
27.06.2017, 12:49 [ТС] | 12 |
Я так полагаю это вопрос организации памяти.
Но как выглядит этот указатель? Я правильно понимаю, что в таком случае он должен быть отдельным для каждой переменной? И почему имя переменной не может само по себе быть указателем? Оно же уникально, как ДНК человека.
0
|
2782 / 1935 / 570
Регистрация: 05.06.2014
Сообщений: 5,600
|
|
27.06.2017, 12:56 | 13 |
1) Потому что когда scanf придумывали, ссылок и шаблонов еще не было. Поэтому, в cin совать char можно, а в scanf можно только указатель. И вообще, scanf/printf предоставляют огромный простор для того чтобы съесть кирпич под видом чебурека, а потом долго удивляться откуда проблемы с зубами.
2) scanf читает строки в си-стиле. При этом в конец строки всегда добавляется дополнительный "нулевой" символ, который этот самый конец строки и отмечает. Один символ для хранения "y", да еще один символ на признак конца строки - в один char никак не влезет.
0
|
0 / 0 / 0
Регистрация: 27.06.2017
Сообщений: 37
|
|
27.06.2017, 12:56 [ТС] | 14 |
Это выдержка из учебника по Бэйсику. Вы про этого говорили?
Последним необязательным символом имени переменной может быть один из знаков объявления типа переменной (%, !, #, $): знак % определяет перемешгую целого типа знак ! — переменная с обычной точностью знак # — переменная с двойной точностью знак $ — строковая переменная. Имена, отличающиеся друг от друга лишь последним знаком, воспринимаются как различные переменные. Например, N%, N!, N#, N$ — имена различных переменных.
0
|
2782 / 1935 / 570
Регистрация: 05.06.2014
Сообщений: 5,600
|
|
27.06.2017, 12:58 | 15 |
0
|
0 / 0 / 0
Регистрация: 27.06.2017
Сообщений: 37
|
|
27.06.2017, 13:05 [ТС] | 17 |
Объясните мне, в каких случаях значение переменной должно равнять одному символу? Ведь бывают же случаи, когда мы не знаем, какое значение примет переменная. Это может быть один символ/цифра, много символов. Не проще ли сразу указывать все строковые переменные типа string? Зачем нужен char?
0
|
2782 / 1935 / 570
Регистрация: 05.06.2014
Сообщений: 5,600
|
|
27.06.2017, 13:15 | 18 |
Например, когда нужно проверить что этот один символ является буквой.
Проще, но дороже. Стринг резиновый, для резиновости дергает динамическую память, а выделение динамической памяти - процесс не самый быстрый. Тогда как под какой ни будь сишный char str[128] память выделяется практически мгновенно.
0
|
Форумчанин
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
|
|
27.06.2017, 13:21 | 19 |
0
|
27.06.2017, 13:21 | |
27.06.2017, 13:21 | |
Помогаю со студенческими работами здесь
19
При вводе данных в объект программа аварийно завершается Проблемы с delete [], программа периодически аварийно завершается на строке с освобождением памяти. Программа аварийно завершается с ошибкой "map/set iterators are incompatible" Программа завершается аварийно при вызове функции Программа аварийно завершается при прохождении цикла Работа с матрицами (программа завершается аварийно) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |