Почему компилятор выдает ошибку, когда я объявил параметр char и использовал аргумент char в htoi? - PullRequest
0 голосов
/ 27 марта 2019

Я пишу программу, которая преобразует шестнадцатеричные значения в числовое значение , для этого я сделал целочисленную функцию htoi (char s [i] ) принимает массивы символов.

Я подключаю массив char с помощью getchar (), чтобы позволить пользователю вводить символы, которые затем присваиваются массиву в моем коде, и указанный массив затем используется в качестве аргумента htoi, однако компилятор жалуется, что htoi использует аргумент с указателем без приведения и хочет char.

Я попытался изменить массивы, такие как char s [], на int s [i], потому что char - это просто меньшее целое число, верно? Итак, когда я изменяю его на int, компилятор потом жалуется, что htoi {s [i]) (теперь s [] является int) делает указатель из целого числа без приведения.

Итак, я понимаю, что итератор в массиве - это не что иное, как указатель на элемент в массиве, хорошо. Отлично, поэтому я убираю и я. , , Ожидается выражение перед токеном ']'.

Я исчерпал свой инструментарий.

#include <stdio.h>
#define YES 1 
#define NO 0 
#define EXIT '~'

int htoi(int s[]); 

int main(){
int i, c = 0;
int s[i];
for (i = 0; (c = getchar()!= EXIT); i++){
   s[i] = c;
   if(c == '\t' || c == '\n' || c == ' '){
      htoi(s[]);
   }else{
      putchar(c);
   }
  }
}

int htoi(int s[]){
int isHexidecimal;
int hexdigit; 
int n; 
int i = 0;


if(s[i] == '0'){
   i++; 
   if(s[i] == 'x' || s[i] == 'X')
      i++; 
}

isHexidecimal = YES;

while(isHexidecimal == YES){

if(s[i] >= '0' && s[i] <= 9){
   hexdigit += s[i] - '0';
   i++; 

}else if(s[i] >= 'a' && s[i] <= 'f'){
   hexdigit += s[i] - 'a' + 10; 
   i++; 

}else if(s[i] >= 'A' && s[i] <= 'F'){
   hexdigit += s[i] - 'A' + 10;
   i++;

}else{

   isHexidecimal = NO;

}if(isHexidecimal == YES) {

   n = n * 16 + hexdigit;
      }else {
       n += 0;
     }
   } 
      return n;
}


Я ожидаю, что основной метод запустит функцию getchar (), которая назначена переменной c, затем назначит переменную c массиву, а затем передаст указанный массив в htoi.

htoi вернет шестнадцатеричное в целочисленное значение или «0», если я не введу правильное шестнадцатеричное значение, или вернет шестнадцатеричное значение и завершится в результате цикла, в котором не введено правильное шестнадцатеричное значение.

1 Ответ

1 голос
/ 27 марта 2019
htoi(s[]);

недействительно, это ничего не значит.Просто передайте указатель на массив.

htoi(s);

int htoi(int s[]);

Объявление массива int s[] внутри списка параметров функции int htoi( <here> ) интерпретируется точно так, как если бы он был указателемк типу int *s

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...