Я сделал свою долю изучения языка C и столкнулся с этой несогласованностью, для которой я не могу учесть. Я искал всюду и рассматривал все определения типа данных и реляционный синтаксис, но это вне меня.Ошибка при использовании элементов массива в условных операторах в C
Из книги C Как программировать возникает вопрос о преобразовании двоичного кода в десятичный преобразователь, где вход должен содержать 5 цифр. Я разработал следующий код для ввода числа и посредством операций деления и остатка разбил его на отдельные цифры и назначил каждому элемент в массиве. Проблема возникает, когда я пытаюсь проверить, что введенное число действительно двоичным проверяя каждый элемент массива, чтобы узнать, является ли это 1 или 0.
Вот код:
#include <stdio.h>
int power (int x, int y); //prototype
int main(void)
{
int temp, bin[5], test;
int n=4, num=0;
//get input
printf("%s","Enter a 5-digit binary number: ");
scanf("%d", &temp);
//initialize array
while(n>=0){
bin[n]=temp/power(10,n);
temp %= power(10,n);
n--; }
//verify binary input
for (test=4; test>=0; test--){
if ((bin[n]!=0)&&(bin[n]!=1)){
printf("Error. Number entered is not binary.\n");
return 0; }
//convert to decimal
while(n<=4){
num+=bin[n]*power(2,n);
n++; }
printf("\n%s%d\n","The decimal equivalent of the number you entered is ",num);
return 0;
}
//function definition
int power(int x, int y)
{
int n, temp=x;
if(y==0) return 1;
for(n=1; n<y; n++){
temp*=x; }
return temp;
}
Может кто-нибудь объяснить меня почему независимо от ввода (независимо от того: 00000 или 12345), я всегда получаю сообщение об ошибке? Все остальное работает нормально. Благодарим вас за помощь.
Обновление: Если оператор if перемещается в цикл while раньше. Это должно все еще работать правильно?
Update2: Ничего, я заметил свою ошибку. Перемещение выражения if во время повторения до этого работает с учетом решения, предоставленного sps и Kunal Tyagi.
Действительно, я сделал настройку, и она работала ужасно. Но теоретически оператор if должен работать так же хорошо, если раньше он включался в цикл while, но, похоже, это не так. –
Nevermind, он работает хорошо. Спасибо за помощь. –
@HectorSanabria Как уже упоминалось @dubafek в его ответе, вам также нужно установить 'n = 0;', прежде чем преобразовать число в десятичное. Я обновил ответ. Вы должны сделать это изменение, даже если кажется, что из-за этого вы не получаете никакой ошибки. – sps