rezafaridi Ответов: 2

Как я могу получить два числа от пользователя и попытаться сделать pow из первого числа во второе число


проблема в том ,что я использовал его, чтобы написать его с помощью while, но не смог

Что я уже пробовал:

#include<stdio.h>
#include<stdlib.h>
#include<math.h>

int main()
{
	int a,b,c;
	printf("enter the first number\n");
	scanf("%d",&a);
	printf("enter the second number\n");
	scanf("%d",&b);
	//-------------------------------------------------------------------------
	for(a=0;a<=b;a*a){
		printf("%d\n",a);
		a*a;
		
	}

2 Ответов

Рейтинг:
2

Patrice T

Смотрите, что вы делаете с a после чтения от пользователя.
Ваш код не имеет смысла, вы должны научиться использовать отладчик, как можно скорее, чтобы увидеть, что он делает.

Существует инструмент, который позволяет вам видеть, что делает ваш код, его имя отладчик Это также отличный инструмент обучения, потому что он показывает вам реальность, и вы можете увидеть, какие ожидания соответствуют реальности.
Когда вы не понимаете, что делает ваш код или почему он делает то, что он делает, ответ таков: отладчик.
Используйте отладчик, чтобы увидеть, что делает ваш код. Просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.

Отладчик - Википедия, свободная энциклопедия[^]

Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010 - YouTube[^]
Отладчик здесь, чтобы показать вам, что делает ваш код, и ваша задача-сравнить с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.


Рейтинг:
0

phil.o

for(a=0;a<=b;a*a){
   printf("%d\n",a);
   a*a;	
}

Первая проблема заключается в объявлении цикла for, вы просто выбрасываете a переменная только что получена от пользователя, и установите ее в ноль. Может быть, вы намеревались использовать c переменная вместо этого?

Вторая проблема заключается в том, что при написании выражения a * a- вы на самом деле ничего не делаете к сама переменная. Вы просто ставите значение a затем сделайте это во второй раз, затем вызовите умножение, которое извлекает значения из стека и возвращает результат к стеку На данный момент для нас ничего не изменилось. a сам по себе, который все еще сохраняет свое первоначальное значение. Если вы хотите, чтобы он запомнил новое значение, вы должны назначить значение, которое находится в стеке к переменной, с помощью a = a * a; например, или a *= a; в более короткой версии.

Третья проблема связана с тем, сколько раз будет выполняться ваш цикл. В вашей реализации, если заданная мощность равна 6, вы бы выполнили цикл 7 раз, например (при условии, что вы исправите первую проблему).
- Либо вы запускаете счетчик на 0, а затем выполняете цикл до тех пор, пока счетчик не станет (мощность - 1),
- или вы начинаете с 1, а затем выполняете цикл до тех пор, пока счетчик не будет включен.
Общим стандартом в семействах языков Си является использование нулевых индексов, поэтому, вероятно, лучше всего придерживаться его.
В чистом виде:
for (counter = 0; counter < total; counter++) {
   /* Zero-based iteration */
}
for (counter = 1; counter <= total; counter++) {
   /* One-based iteration */
}

оба будут выполнять цикл желаемое количество раз (обратите внимание на все различия между ними, особенно на компаратор в тестовой части: первый-оператор меньше, а второй-оператор меньше или равен).

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