#c #loops #integer #scanf
#c #циклы #целое число #scanf
Вопрос:
Я не знаю, действительно ли это имеет смысл, но я пытаюсь повторно использовать исходное значение x из scanf() во втором цикле, чтобы он мог печатать то, что ему нужно для печати, но мне трудно понять это. Есть ли способ в C (я все еще новичок) сделать это без использования функций?
int main(){
int x;
int res1 = 0, res2 = 0;
scanf("%u", amp;x);
//reverse the digits of a number
if (x == 0) {
res2 = 1;
}
while (x != 0) {
if (x % 10 == 0) {
res2 ;
x /= 10;
}
else {
x /= 10;
}
}
//count number of zeroes in a number using the same value from the scanf()
do {
res1 = res1 * 10 x % 10;
x = x / 10;
} while (x != 0);
printf("%u %un", res1, res2);
}
Комментарии:
1. «я пытаюсь повторно использовать исходное значение x». Определите другую переменную и сохраните оригинал
x
в этой переменной.2. это должно быть
scanf("%d", amp;x);
илиscanf("%i", amp;x);
.."%u"
дляunsigned int
3.
scanf()
это функция, поэтому вы не можете использовать значения изscanf()
без функций.
Ответ №1:
Чтобы сохранить значение x
, вы не должны меняться x
. /=
оператор изменяет значение левого операнда (если только не является правым операндом 1
).
Попробуйте это:
int main(){
int x, x_work;
int res1 = 0, res2 = 0;
scanf("%u", amp;x);
//reverse the digits of a number
if (x == 0) {
res2 = 1;
}
x_work = x;
while (x_work != 0) {
if (x_work % 10 == 0) {
res3 ;
x_work /= 10;
}
else {
x_work /= 10;
}
}
//count number of zeroes in a number using the same value from the scanf()
do {
res1 = res1 * 10 x % 10;
x = x / 10;
} while (x != 0);
printf("%u %un", res1, res2);
}
Или вы можете просто удалить часть, которая уничтожает значение x
, потому res3
что измененное там не используется в более позднем процессе.
int main(){
int x;
int res1 = 0, res2 = 0;
scanf("%u", amp;x);
//reverse the digits of a number
if (x == 0) {
res2 = 1;
}
//count number of zeroes in a number using the same value from the scanf()
do {
res1 = res1 * 10 x % 10;
x = x / 10;
} while (x != 0);
printf("%u %un", res1, res2);
}