varredura de uma string para matriz de caracteres hexadecimais
Aqui está o meu código de exemplo:
char a;
char str [20];
unsigned char b[8] ;
unsigned char c[8];
int argsread;
int i;
init_8051();
while(1)
{
printf("\n enter a 64 bit operation \n");
argsread = scanf("%s", str);
sscanf(str, "0x%x%c0x%x", b, &a, c);
printf("\n %d arguments read \n",argsread);
for(i=0;i<8;i++)
{
printf("\n %#x %c %#x\n",b[i],a,c[i]);
}
}
}
O problema aqui é que, quando entro, por exemplo, no terminal, a seguinte entrada: 0x1234567890abcdef + 0x1234567890abcdef
isso leva a um erro em que a saída do array de caracteres está totalmente errada e a maioria dos números é atribuída a um, que deveria ter sido o sinal de mais, estou fazendo algo fundamentalmente errado?
Atualizar: Mudei meu código para o seguinte:
while(1)
{
printf("\n enter a 64 bit operation \n");
argsread = scanf("%s", str);
sscanf(str, "0x%s%c0x%s", b, &a, c);
printf("\n %d arguments read \n",argsread);
printf("\n %s \n",b);
}
e eu aumentou o tamanho de str para 30 o problema é que a saída do programa é:
1 arguments read
abcdef+0xabcdef
então o valor de b em vez de apenas abcdef é a string toda !!
Update2: Encontrei este código que funciona perfeitamente, mas eu queria usar scanf em vez de cin, aqui está o código
:`#include <iostream>
using namespace std;
int main()
{
float a, b, result;
char oper, clear;
cout << "Please enter an equation: i.e 5+5 " << endl;
for (;;) {
cin >> a;
cin >> oper;
cin >> b;
if (oper == '+')
result = a + b;
else if (oper == '-')
result = a - b;
else if (oper == '*')
result = a * b;
else if (oper == '/')
result = a / b;
cout << "= " << result << endl << endl;
cin.clear();
cin.ignore();
}
} `