2014-12-02 2 views
1

Привет, я пытаюсь преобразовать char в int. У меня есть массив символов, который был введен через scanf, «10101», и я хочу установить элементы массива int, равные этим элементам массива char.Кастинг char массива в массив int с использованием atoi

Пример ввода:

char aBuff[11] = {'\0'}; 
int aDork[5] = {0}; 

scanf("%s", aBuff); //aBuff is not equal to 10101, printing aBuff[0] = 1, aBuff[1] = 0 and so on 

Теперь я хочу aDork[0] равным aBuff[0], который был бы 1.
Ниже приведено то, что у меня есть.

//seems to not be working here 
//I want aDork[0] to = aBuff[0] which would be 1 
//But aDork[0] is = 10101 which is the entire string of aBuff 
//aBuff is a char array that equals 10101 
//aDork is an int array set with all elements set to 0 

int aDork[5] = {0} 
printf("aBuff[0] = %c\n", aBuff[0]); //value is 1 
aDork[0] = atoi(&aBuff[0]); //why doesnt this print 1? Currently prints 10101 
printf("aDork[0] = %d\n", aDork[0]); //this prints 1 

printf("aBuff[1] = %c\n", aBuff[1]); //this prints 0 
printf("aBuff[2] = %c\n", aBuff[2]); //this prints 1 
+0

Кастинг - это принудительное преобразование типа. Не разбирайте, как 'atoi'. – Deduplicator

+0

поэтому, если я хочу, чтобы каждый элемент массива char стал литералом int 1 или int 0, как я могу это достичь? – Yawn

+0

разница между номером char и номером int (одной цифры) равна 0x30 ('0'), поэтому: aDork [0] = aBuff [0] - '0'; aDork [1] = aBuff [1] - '0'; и т. д. – user3629249

ответ

3

Вы спрашиваете:

aDork[0] = atoi(&aBuff[0]); // why doesnt this print 1? Currently prints 10101 

Это так, потому что:

&aBuff[0] == aBuff; 

они эквивалентны. Адрес первого элемента в массиве - это тот же адрес, который вы получаете при обращении к самому массиву. Так вы говорите:

aDork[0] = atoi(aBuff); 

, который принимает всю строку в aBuff и оценивает его целое значение. Если вы хотите, чтобы получить значение цифры, сделать это:

aDork[0] = aBuff[0] - '0'; // '1' - '0' == 1, '0' - '0' == 0, etc. 

и теперь

aDork[0] == 1; 

Рабочий пример: https://ideone.com/3Vl3aI

+0

не должен ли я знать, что такое aBuff [1]? Например, если я хочу aDork [1] = aBuff [1], и я не знаю, равен ли aBuff [1] «1» или «0», я бы просто не смог написать aDork [1] = aBuff [1] - '0', потому что это даст 1? – Yawn

+0

Нет. Если 'aBuff [1] == '0'', то' aBuff [1] -' 0'' совпадает с ''0' - '0'', что, конечно,' 0'. См. Пример - он преобразует все цифры в целые числа в массиве 'aBuff'. –

+0

Я вижу, спасибо! – Yawn

1

этот код работает, как ожидалось, но вы не понимая, как работает atoi:

Теперь я хочу aDork [0] Положительный эффект [0], которая была бы 1

но

aDork[0] = atoi(aBuff);

означает aDork [0] будет хранить целое значение aBuff. Значение значение 10101, а не строка «10101»

PS: Вы не нужен массив полукокса для aDork:

int aDork = 0; 
aDork = atoi(aBuff); 

достаточно.

1

Предполагая, что aBuff содержит строку нулей и единиц (которая не превышает длину aDork), следующее передало бы эти значения целочисленному массиву.

for (int i = 0; i < strlen(aBuff); i++) 
{ 
    aDork[i] = (aBuff[i] - '0'); 
} 
Смежные вопросы