C Замена номера переменной

Можно ли еще автоматизировать эту программу, чтобы изменить номер переменной?

    for (i = 1; i < 4; i++)
    {
    printf("Enter the Code for Item #%d: ",i);
    scanf("%d", &CodeNumber1);
    printf("Enter the Price for Item #%d: ",i);
    scanf("%f", &Price1);
    printf("Enter the Quantity for Item #%d: ", i);
    scanf("%d", &Quantity1);
    }

Итак, если в переменной записано 1, можно ли заменить ее на i?

Без использования массива

Взгляните на это: stackoverflow.com/questions/10468128/…

Fabio_MO 02.05.2018 15:02

Я бы сказал нет. Чего вы пытаетесь достичь. Это может быть Проблема XY. Что плохого в использовании массива? Он вам определенно нужен здесь.

Jabberwocky 02.05.2018 15:02

Обычно 1 следует заменять на [i] или аналогичный, но по какой-то секретной причине вы не хотите использовать массивы.

Gerhardh 02.05.2018 15:04

Я хотел посмотреть, можно ли сделать это без массива, хотя, спасибо, ребята, я использую массив

VallyMan 02.05.2018 15:06

при вызове любой из функций семейства scanf(): 1) всегда проверяйте возвращаемое значение (а не значения параметров), чтобы убедиться, что операция прошла успешно.

user3629249 04.05.2018 11:46
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
5
103
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вместо имени исправления можно использовать массивы. Например, вы можете использовать что-то вроде

int CodeNumber[4] = {0};
for (i = 0; i < 4; i++)
{
    printf("Enter the Code for Item #%d: ",i);
    scanf("%d", &CodeNumber[i]);
}

На мой взгляд, еще лучшим подходом было бы использовать структуры, которые содержат ваши 3 целых числа внутри:

struct item {
  int CodeNumber;
  int ...
}

А затем используйте это так:

struct item myItem[4];
for (i = 0; i < 4; i++)
{
    printf("Enter the Code for Item #%d: ",i);
    scanf("%d", &(myItem[i].CodeNumber));
    ...
}

Вы должны использовать массив для хранения ваших переменных, например:

int data[4] = {0};
for(unsigned int i = 0; i < 4; i++) {
    printf("Enter the data for item #%d: ",i);
    scanf("%d", &data[i]);
}
Ответ принят как подходящий

Без массива? Вызов принят. Хорошо, что Boost.Preprocessor также работает с C!

#include <boost/preprocessor/repetition/repeat_from_to.hpp>
#include <boost/preprocessor/cat.hpp>

#define LOOP_BODY(z, n, data) \
    printf("Enter the Code for Item #%d: ", n); \
    scanf("%d", &BOOST_PP_CAT(CodeNumber, n)); \
    printf("Enter the Price for Item #%d: ", n); \
    scanf("%f", &BOOST_PP_CAT(Price, n)); \
    printf("Enter the Quantity for Item #%d: ", n); \
    scanf("%d", &BOOST_PP_CAT(Quantity, n));

BOOST_PP_REPEAT_FROM_TO(1, 4, LOOP_BODY, ~)

Я не несу ответственности за любую потерю личной или профессиональной репутации, гордости, жизни или здоровья; или случай любого апокалипсиса в результате использования приведенного выше кода.

Я также не несу ответственности за потерю репутации SO :)

Magix 02.05.2018 15:08

@ Квентин: Хорошо, я проигнорировал это. Спасибо.

Jabberwocky 02.05.2018 15:09

Это единственный ответ, который напрямую достигает того, чего хотел ОП! :)

Mike Andrews 02.05.2018 15:10

Хороший. Хотя вы можете упомянуть, что препроцессор boost гарантированно работает на C.

Bathsheba 02.05.2018 15:15

@Bathsheba Ну, я не уверен, почему люди считают иначе. Первая строка документации - «Библиотека предварительной обработки Boost - это библиотека макросов с поддержкой метапрограммирования препроцессора. Библиотека поддерживает компиляцию как C++, так и C.»

Quentin 02.05.2018 15:16

@Quentin: Ну, когда старые кошки вроде меня видят hpp, мы думаем, что это заголовок C++. Просто говорю'.

Bathsheba 02.05.2018 15:17

@Bathsheba добавил примечание для старых кошек.

Quentin 02.05.2018 15:18

@Quentin: Спасибо - я проголосовал за, и теперь жду, чтобы наброситься на того, кто проголосовал против.

Bathsheba 02.05.2018 15:20

Спасибо! Это потрясающе хаха

VallyMan 02.05.2018 16:50

Другие вопросы по теме