Как использовать члены структуры для арифметических операторов (добавить, sub, mul, div переменную к элементу структуры)

#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 with scanf() , чтобы указать, что не более 4 цифр (или 3 цифры плюс десятичная точка, или знак и 2 цифры и десятичная точка и т.д.) Должны быть преобразованы. Вы не можете использовать %0.2f , хотя, как вы говорите.

2. Большое вам спасибо за ответ на мой глупый вопрос. 🙂 я слишком поздно понял, что scanf имеет разные спецификаторы. еще раз спасибо, чувак