Можно ли еще автоматизировать эту программу, чтобы изменить номер переменной?
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?
Без использования массива
Я бы сказал нет. Чего вы пытаетесь достичь. Это может быть Проблема XY. Что плохого в использовании массива? Он вам определенно нужен здесь.
Обычно 1 следует заменять на [i]
или аналогичный, но по какой-то секретной причине вы не хотите использовать массивы.
Я хотел посмотреть, можно ли сделать это без массива, хотя, спасибо, ребята, я использую массив
при вызове любой из функций семейства scanf()
: 1) всегда проверяйте возвращаемое значение (а не значения параметров), чтобы убедиться, что операция прошла успешно.
Вместо имени исправления можно использовать массивы. Например, вы можете использовать что-то вроде
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 :)
@ Квентин: Хорошо, я проигнорировал это. Спасибо.
Это единственный ответ, который напрямую достигает того, чего хотел ОП! :)
Хороший. Хотя вы можете упомянуть, что препроцессор boost гарантированно работает на C.
@Bathsheba Ну, я не уверен, почему люди считают иначе. Первая строка документации - «Библиотека предварительной обработки Boost - это библиотека макросов с поддержкой метапрограммирования препроцессора. Библиотека поддерживает компиляцию как C++, так и C.»
@Quentin: Ну, когда старые кошки вроде меня видят hpp
, мы думаем, что это заголовок C++. Просто говорю'.
@Bathsheba добавил примечание для старых кошек.
@Quentin: Спасибо - я проголосовал за, и теперь жду, чтобы наброситься на того, кто проголосовал против.
Спасибо! Это потрясающе хаха
Взгляните на это: stackoverflow.com/questions/10468128/…