Как использовать члены структуры для арифметических операторов (добавьте, sub, mul, div переменную к члену структуры) - PullRequest
1 голос
/ 28 марта 2019

Извините за нубский вопрос. Как использовать арифметические операторы для переменных внутри структуры?

У меня есть эта структура

struct account {
    int no;
    char name[100];
    int pin;
    float id;
}; 

я хочу добавить значение с плавающей точкой 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", &i);

    printf("enter value to struct\n");
    scanf("%f", &rec.id);

    rec.id = rec.id + i;

    printf("sum is %0.2f", rec.id);
}

значение rec.id остается неизменным.

Я знаю, что что-то упустил. надеюсь, это не будет слишком беспокоить

1 Ответ

4 голосов
/ 28 марта 2019

Спецификаторы формата scanf() отличаются от спецификаций printf(). В частности, длина десятичных знаков не может быть указана там, поэтому флаги 0.2 до %f недействительны. Просто используйте

scanf("%f",&i);

printf("enter value to struct\n");
scanf("%f",&rec.id);

Как отметил Джонатан Леффлер, однако можно указать общую длину числа (включая точку и десятичное число), например, с помощью %4f для сканирования четырехзначного десятичного числа.

Кроме того, вы должны включить все предупреждения компилятора и прослушать их. Вы бы заметили предупреждения, которые показывают именно эту проблему.

Кроме того, вы должны проверить возвращаемые значения scanf(), чтобы убедиться, что преобразование прошло успешно. В противном случае значения в ваших переменных остаются неинициализированными.

Две незначительные проблемы:

  • Использование int main (void)
  • Явно возвращает значение из main() или вызывает exit(0) (больше не требуется строго, если вы используете хотя бы стандарт C99)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...