#c #math #struct
#c #математика #структура
Вопрос:
Извините за вопрос новичка. Как мне использовать операторы arith для переменных внутри структуры?
У меня есть эта структура
struct account {
int no;
char name[100];
int pin;
float id;
};
что я хочу сделать, так это добавить значение в float id
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
#include <process.h>
main() {
struct account {
int no;
char name[100];
int pin;
float id;
};
struct account rec;
float i;
printf("enter var value n");
scanf("%f", amp;i);
printf("enter value to structn");
scanf("%f", amp;rec.id);
rec.id = rec.id i;
printf("sum is %0.2f", rec.id);
}
значение rec.id
остается неизменным.
Я знаю, что чего-то не хватает. надеюсь, это не будет слишком большой проблемой
Комментарии:
1. Пожалуйста, проверьте возвращаемые значения из
scanf
— они важны!2.
rec.i
выдаст ошибку. Вы имеете в виду простоi
? Каковы ваши входные и выходные данные?3. @ctx о, извините, да, просто я
Ответ №1:
Спецификаторы формата scanf()
отличаются от спецификаторов printf()
. В частности, там не может быть указана длина десятичных знаков, поэтому флаги 0.2
to %f
недопустимы. Просто используйте
scanf("%f",amp;i);
printf("enter value to structn");
scanf("%f",amp;rec.id);
Как отметил Джонатан Леффлер, однако можно указать общую длину числа (включая точку и десятичные дроби), например, с помощью O
для поиска четырехсимвольной десятичной дроби.
Кроме того, вы должны включить все предупреждения компилятора и прослушать их. Вы бы заметили предупреждения, которые показывают именно эту проблему.
Кроме того, вы должны проверить возвращаемые значения scanf()
, чтобы увидеть, были ли преобразования успешными. В противном случае значения в ваших переменных останутся неинициализированными.
Две незначительные проблемы:
- Использовать
int main (void)
- Явно возвращать значение из
main()
или вызоваexit(0)
(строго говоря, больше не требуется, если вы используете по крайней мере стандарт C99)
Комментарии:
1. Вы можете использовать
O
withscanf()
, чтобы указать, что не более 4 цифр (или 3 цифры плюс десятичная точка, или знак и 2 цифры и десятичная точка и т.д.) Должны быть преобразованы. Вы не можете использовать%0.2f
, хотя, как вы говорите.2. Большое вам спасибо за ответ на мой глупый вопрос. 🙂 я слишком поздно понял, что scanf имеет разные спецификаторы. еще раз спасибо, чувак