#c #arrays #pointers #structure #return-value
#c #массивы #указатели #структура #возвращаемое значение
Вопрос:
#include <stdio.h>
#define G 9.81
/используемый /structure bring называется USER_INPUT
typedef struct
{
double weight;
double drag;
double time;
} USER_INPUT;
void getInput(USER_INPUT *); //function prototype - which i think works
void main()
{
USER_INPUT input;
getInput(amp;input);
// Здесь должны отображаться введенные значения, но они ничего не вернут
printf("Weight = ", input.weight);
printf("Drag = ", input.drag);
printf("Time =", input.drag);
}
// Отдельная функция, в которой я получаю входные данные от пользователя. это работает, но значения не передаются обратно в main
void getInput (USER_INPUT *inpPtr)
{
printf("Please enter the weight:");
scanf("%lf", amp;inpPtr->weight);
fflush(stdin);
printf("Please enter the drag:");
scanf("%lf", amp;inpPtr->drag);
fflush(stdin);
printf("Please enter the time:");
scanf("%lf", amp;inpPtr->time);
fflush(stdin);
return(0); //<- idk if this is right either
}
Комментарии:
1. Это неверно, вам не разрешено возвращать значение, если возвращаемый тип равен
void
. Ваша проблема в том, что вашиprintf
s неверны. ideone.com/f3BqOC
Ответ №1:
Проблема, которую вы описываете, может быть связана с тем фактом, что вы не указали спецификаторы формата в своих printf()
операторах. Кроме того, вы пытаетесь отобразить .drag
дважды:
printf("Weight = %gn", input.weight);
printf("Drag = %gn", input.drag);
printf("Time = %gn", input.time);
Функция getInput()
не передает значения обратно в main()
(в конце концов, она имеет возвращаемый тип void
!), Но она изменяет значения, хранящиеся в полях USER_INPUT
структуры input
, которая существует в области видимости main()
.
Здесь есть некоторые другие проблемы. main()
Функция всегда возвращает an int
, и вы должны объявить ее следующим образом:
int main(void){}
В качестве альтернативы, если вы используете аргументы командной строки, вы можете сделать:
int main(int argc, char *argv[]){}
или:
int main(int argc, char **argv){}
Сброс входного потока — это неопределенное поведение, хотя оно работает в некоторых системах. Для переносимости лучше этого не делать. Вы можете использовать что-то вроде:
while (getchar() != 'n')
continue;
чтобы отбросить ненужные символы во входном потоке после вызова scanf()
.
Наконец, функция с возвращаемым типом void
не нуждается в return
инструкции, хотя некоторые люди любят использовать return ;
, чтобы сделать возврат явным. Но возвращать int
значение из такой функции, безусловно, неправильно.