#c
Вопрос:
Я использую gcc в arch linux, компьютер-старый dell inspiron. На языке си я мог бы написать:
#include <stdio.h>
int main
{
int x = scanf("%i",amp;x);
printf("%i",x);
}
я могу скомпилировать этот файл, и он пройдет, и он даст мне 1.000000 за бодание в любом количестве.
#include <stdio.h>
int main()
{
double x;
x = scanf("%lf",amp;x);
printf("%lf",x);
}
я мог бы указать переменную перед сканированием, если я могу использовать %d.
я огляделся вокруг и на самом деле ничего не нашел.
если у вас есть еще какие-либо вопросы, пожалуйста, задавайте.
Спасибо.
редактировать я не хотел, чтобы amp; с добавлением printf x int amp; edit для информации
Комментарии:
1. Вы выводите возвращаемое значение
scanf
— не аргумент.2.
scanf
требуется указатель на переменную, в которой должно храниться входное значение, ноprintf
должно быть передано само значение. Поэтому последняя строка должна бытьprintf("%i", x);
безamp;
. За это вы должны были получить предупреждение компилятора.3. я допустил ошибку, я не хотел ставить amp; вместе с printf. Спасибо
4. Напомним, что вы не можете правильно использовать какую-либо функцию ввода, если не проверите возврат , чтобы определить, был ли ввод успешным или неудачным. Неспособность проверить входные данные приводит к неопределенному поведению в вашем коде. (конечно, если вы сохраняете возврат, вы используете отдельную переменную, например
int rtn = scanf("%i",amp;x); if (rtn == EOF) { /* handle EOF case */ } else if (rtn == 0) { /* handle matching failure */ } else if (rtn == 2) { /* good input */ }
Ответ №1:
Вы допустили 3 ошибки в 2 строках. Вам следует ознакомиться с документацией об используемых функциях.
scanf
возвращает количество успешно отсканированных элементов, а не отсканированное значение. Если вы сканируете 1 объект, то в случаеscanf
успешного выполнения возвращаемое значение всегда будет 1printf("%i", amp;x);
не выводит значениеx
, только адрес (ссылку)x
использования неправильного спецификатора формата, который является UB.
Комментарии:
1. Я обычно всегда предупреждаю о последствиях отказа в проверке входных данных (так же, как вы объясняете последствия в своем № 2.). Хорошо сделано.
Ответ №2:
Это должно быть:
#include <stdio.h>
int main(void) {
int x;
scanf("%i", amp;x);
printf("%i", x);
return 0;
}
Комментарии:
1. лучше
if(scanf("%i", amp;x) == 1) printf("%i", x);