- Scanf не работает дважды
- Функция scanf() не работает
- Решение
- Решение
- scanf_s не читает ввод при повторном вызове
- 1 ответ 1
- Почему функция «scanf» не работает в си?
- 2 ответа 2
- Всё ещё ищете ответ? Посмотрите другие вопросы с метками c ввод scanf или задайте свой вопрос.
- Похожие
- Подписаться на ленту
- C: Несколько scanf, когда я ввожу значение для одного scanf, он пропускает второй scanf
- ОТВЕТЫ
- Ответ 1
- Ответ 2
- Ответ 3
- Ответ 4
- Ответ 5
- Ответ 6
- Ответ 7
Scanf не работает дважды
Помощь в написании контрольных, курсовых и дипломных работ здесь.
#include #include #include #include #define N 80.
Scanf читает данные дважды
помогите найти проблемы в коде. отрывок кода должен считывать координаты точки в следующем.
#include int main() < char c; int d; scanf_s("%c",&c); .
Здравствуйте! Необходимо описать массив структур и реализовать 4 функции: Добавление записи.
Вот так например
Когда вы прочитали первый символ в потоке остался символа перевода строки (10 код)
И этот символ хавается переменной z
функция fflush очищает поток от лишних символов
поэтому когда вы вызываете scanf второй раз есть возможность прочитать второй символ
Добавлено через 1 минуту
Здравствуйте, помогите решить проблему с функцией scanf(); Она не принимает значения в переменные.
Функция scanf не работает
Возникает проблема, что функция scanf не работает. Скрин: Можно как-нить решить? И не будут ли.
Не понимаю как работает scanf
Здравствуйте, вот код программы. При работе программы второй scanf пропускается. Почему так.
Fgets вместе с scanf не работает
Доброго времени суток. Я начинающий C программист. При создании своего файлового менеджера, я.
Источник
Функция scanf() не работает
Здравствуйте, помогите решить проблему с функцией scanf(); Она не принимает значения в переменные вообще. Работаю в Visual Studio 2017. Пробовал по советам очищать поток и присваивать переменным значение int, не помогает.
Ошибка в данном месте
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Функция scanf не работает
Возникает проблема, что функция scanf не работает. Скрин: Можно как-нить решить? И не будут ли.
C — Функция scanf()
И снова я.Заранее прошу прощения за такие глупые,возможно,вопросы,но всё же. #include.
Не определяется функция scanf
Привет!) У меня такая проблема. не хочет считывать строки(( уже все перепробовал. вот.
Функция scanf(), не считывает данные
Вот перед вами кусок кода, это функция которая возвращает true или false bool ask(char *text) <.
Решение
Нравятся мне такие сообщения. scanf не работает! Ужели?
Решение
Но при этом делаете вывод, что scanf не работает?
У всех работает, а у Вас не работает.
Очевидно же, что дело не в scanf.
Найдите ошибку в коде:
не могу понять почему не выводится функция scanf p.s. я начинающий вот код: #include «stdio.h».
Функция ввода с клавиатуры scanf
Здравствуйте. WinXP, MS VS20005 В приведенном коде BBB независимо от введенного с клавиатуры.
Чтение вещественного числа, функция scanf
Здравствуйте! Только начал знакомство с этим замечательным языком. Возникла такая проблема.
Как я понимаю: использовать scanf + массив для проверки на корректность ввода — неудачная идея. Она.
Источник
scanf_s не читает ввод при повторном вызове
В чём причина такого поведения scanf_s и как это исправить? Если не использовать модификатор набора символов, всё работает как надо:
1 ответ 1
Во-первых, форматная строка «%[a-z]s» рассматривается scanf как спецификатор формата %[a-z] за которым следует посторонний самостоятельный символ s . Все самостоятельные символы в форматной строке (кроме пробельных) рассматриваются scanf как требование того, чтобы такой символ присутствовал во входной строке. В ваших входных строках никакого s нет. В результате первый scanf завершается досрочно по ошибке несоответствия формата, хоть и после успешного прочтения abc . Он возвращает 1 , т.е. первый printf срабатывает.
Что такое «%[a-z]s» ? Зачем вы поместили туда это s ? Формат %[] является самодостаточным форматом scanf . В нем нет и никогда не было никакого s после ] .
Во-вторых, при входе abcABC ваш первый scanf читает успешно abc , что вы и наблюдаете, а остаток строки — ABC — остается во входном буфере. Ваш второй scanf ничего не читает, так как вход ABC не соответствует формату %[a-z] . Если спецификатору формата не удалось ничего прочитать, scanf не читает пустую строку, а завершается досрочно по ошибке несоответствия формата. Второй scanf возвращает 0 , поэтому ваш второй if не срабатывает. Как и должно быть.
В-третьих, все форматы scanf , кроме форматов %[] и %c , осуществляют изначальное пропускание пробельных символов во входном потоке, перед тем как начать собственно чтение. Если вы введете на вход вашего кода строку abc с последующим нажатием Enter , то во входном буфере образуется последовательность abc\n . Первый scanf успешно прочитает abc , но символ \n не совпадает с символом s , требуемым первым scanf . Поэтому первый scanf завершится и оставит символ \n во входном потоке. Второй scanf начнет чтение именно с этого символа \n . Так как символ \n не соответствует формату %[a-z] второй scanf ничего прочитать не сможет и вернет 0 .
Источник
Почему функция «scanf» не работает в си?
/*Программа требует от пользователя ввод данных, но эти данные не воспринимаются scanf, выставляются либо минимальные значения, либо нули, уже кучу форумов перерыл в поисках ответа, но так и не нашел его, что делать? */
// Геометрическая лаба.cpp: определяет точку входа для консольного приложения. //
//(вот сама программа)
2 ответа 2
Оператор & перед именем переменной возвращает адрес в памяти, где хранится эта переменная. Функции scanf и другим подобным функциям нужен именно адрес переменной в памяти, поскольку им нужно записывать значение в эту переменную. Единственный способ изменять переменную внутри функции так, чтобы эти изменения были видны снаружи функции — передача в функцию указателя (как это делается в scanf ) или ссылки на переменную. Функциям вывода, таким как printf , не нужно изменять переменную внутри функции. Поэтому они работают с передачей переменной по значению. Оператор взятия адреса ( & ) перед аргументами printf не нужен. Если вы всё-таки используете оператор & перед аргументами printf , то Вы увидите на экране адреса (номера ячеек памяти), где лежат значения, а не сами значения. Что касается scanf_s и других подобных функций. Они делают то же самое, что и обычный scanf . Разница только в том, что они требуют указывать размер буфера, что позволяет предотвращать запись данных в память за границей массива. Что касается вычислений — не возьмусь проверять геометрические формулы. Выведите результат правильно (без & ). Если он по-прежнему будет неверным, советую просто выводить результаты каждого шага вычислений и сверять с вычисленными вручную данными. Так Вы легко найдёте ошибку. И расставьте скобки в условии if. Если Вам почему-то не хочется этого делать, почитайте по приоритет операторов и проверьте Ваше условие. Возможно, выражение в условии вычисляется совсем не так, как Вы ожидали.
Так, проблема решилась, во- первых ошибка была в scanf( после %f запятые не нужны), во вторых if надо было переделать вот так if ((DA + AB > BD) && (BC + CD > BD) && (AB == BC) && (BC == CD) && (CD == DA) && (DA == AB)) , в третьих амперсанд перед S не нужен, он лишний, спасибо за помощь вам всем)))) , кстати, чуть не забыл S = (1. / 2.) * (AC * BD); формулу площади лучше писать вот так.
Всё ещё ищете ответ? Посмотрите другие вопросы с метками c ввод scanf или задайте свой вопрос.
Похожие
Подписаться на ленту
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
дизайн сайта / логотип © 2021 Stack Exchange Inc; материалы пользователей предоставляются на условиях лицензии cc by-sa. rev 2021.10.18.40487
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Источник
C: Несколько scanf, когда я ввожу значение для одного scanf, он пропускает второй scanf
У меня есть этот блок кода (функции опущены, поскольку логика является частью домашнего задания):
Первые два Scanf работают отлично, без проблем, когда мы попадаем в цикл while. У меня проблема, когда, когда вам предлагается ввести новую форму char, вместо этого она переходит в printf длины и ждет ввода оттуда для char, а затем десятичного числа на следующей итерации цикла.
Scanf: Shape. Работает отлично Scanf: длина. Нет проблем
Scanf: Shape. Пропуски через это Scanf: длина. Проблема, этот scanf отображает форму char.
Loop 2
Scanf: Shape. Пропуски через это Scanf: длина. Проблема, этот scanf теперь сопоставляется с размером int.
Почему он это делает?
ОТВЕТЫ
Ответ 1
scanf(«%c») читает символ новой строки из клавиши ENTER .
Когда вы наберете let say 15 , введите a 1 , a 5 и нажмите клавишу ENTER . Таким образом, во входном буфере есть три символа. scanf(«%d») читает 1 и 5 , интерпретируя их как число 15 , но символ новой строки все еще находится во входном буфере. scanf(«%c») немедленно прочитает этот символ новой строки, и программа затем перейдет к следующему scanf(«%d») и дождитесь, пока вы введете номер.
Обычный совет — прочитать целые строки ввода с помощью fgets и интерпретировать содержимое каждой строки на отдельном шаге. Более простым решением вашей непосредственной проблемы является добавление getchar() после каждого scanf(«%d») .
Ответ 2
Основная проблема заключается в том, что scanf() оставляет новую строку после номера в буфере, а затем читает ее с помощью %c на следующем проходе. На самом деле, это хорошая демонстрация того, почему я не использую scanf() ; Я использую линейный ридер ( fgets() , например) и sscanf() . Это легче контролировать.
Возможно, вы можете спасти его, используя » %c» вместо «%c» для строки формата. Заготовка приводит к тому, что scanf() пропускает пробел (включая символы новой строки) перед чтением символа.
Но в долгосрочной перспективе будет проще отказаться от scanf() и fscanf() и использовать fgets() или эквивалентный плюс sscanf() . Все остальное, отчет об ошибках намного проще, если у вас есть целая строка для работы, а не данные, оставшиеся после scanf() после его отказа.
Вы также должны всегда проверять, что вы получили значение, преобразованное из scanf() . Вход не работает; обычно и ужасно. Не позволяйте этому разрушать вашу программу, потому что вы не проверяли.
Ответ 3
чтобы очистить входной буфер.
Ответ 4
Попробуйте добавить пространство в scanf.
Это приведет к тому, что scanf() отбросит все пробелы перед сопоставлением целого числа.
Ответ 5
Когда вы вводите форму и ENTER, форма потребляется первым scanf, но ENTER не является! Второй scanf ожидает число так, ENTER пропускается, потому что считается пробелом, а scanf ожидает действительного ввода (числа), который, опять же, заканчивается нажатием ENTER. Ну, количество потребляется, но ENTER не так, поэтому первый scanf внутри него использует его, и ваше приглашение формы пропускается. этот процесс повторяется. Вы должны добавить еще один% c в scanfs, чтобы иметь дело с клавишей ENTER. Надеюсь, это поможет!
Ответ 6
Символ ‘\n’ по-прежнему остается во входном потоке после завершения первого вызова scanf , поэтому второй вызов scanf() читает его. Используйте getchar() .
Ответ 7
Вы также можете использовать scanf(«%c%*c», &c); для чтения двух символов и игнорирования последнего (в этом случае «\n» )
Источник