Conversie

Intrebari despre limbajul C++, standardul C++, STL, OOP in C++ sau alte subiecte nelegate de VisualC++

Conversie

Mesajde Klau » 09 Mar 2010, 13:16

Am urmatoarea problema:
Se da un char si trebuie sa-l convertesc in int (integer):
char szstring[9]=6,5,4,3,2,1;

Spuneti-mi cum fac aceasta conversie, in final trebuie sa rezulte un numar(int) 654321.


Eu l-am facut asa, var rog spunet-mi daca e bine:

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

void main (void)
{
int x;
char szstring[9] = "6,5,4,3,2,1";

x = atoi(szstring);
printf ("The value entered is %d\n", x);
}

La executie imi afiseaza doar prima cifra adica 6. Ar trebui sa-mi arate intreg numarul 654321,deci sa ignore virgula s-au spatiul liber. Imi da si eroarea asta la compilare: error C2117: '6,5,4,3,2,1' : array bounds overflow. Am mai sters din sir pt ca depaseste limita cred si daca pun 6,5,4 ruleaza. Cum trebuie sa fac corect?
Multumesc!
Klau
Junior
Junior
 
Mesaje: 5
Membru din: 21 Feb 2010, 13:28

Re: Conversie

Mesajde zlatomir » 09 Mar 2010, 13:44

Functia atoi se opreste la caracterul virgula, de aceea face conversia doar la primul caracter, poti sa pui char string[] = "654321" si atunci o sa iti puna tot numarul, sau sa scrii tu o functie care sa "sara" peste virgule, sau alte caractere care nu pot fi convertite la integers

Eroarea cu bounds overflow apare pentru ca si caracterul virgula ocupa spatiu
Avatar utilizator
zlatomir
Membru
Membru
 
Mesaje: 175
Membru din: 04 Iul 2009, 23:59
Localitate: Arad->Felnac

Re: Conversie

Mesajde Silviu Ardelean » 09 Mar 2010, 15:02

Daca lungimea arrayului tau e fixa (numarul numerelor dintre virgule), atunci poti folosi un intr-un for functia sscanf().
Daca lungimea arrayului e variabila, atunci trebuie sa folosesti un array intermediar in care sa ti numerele dintre virgule extrase (tot folosind for si sscanf()). Intr-un final, extragi numarul din arrayul intermediar cu atoi() sau atol().
Avatar utilizator
Silviu Ardelean
Membru++
Membru++
 
Mesaje: 938
Membru din: 12 Iul 2007, 09:22
Localitate: Timisoara

Re: Conversie

Mesajde Marius Bancila » 09 Mar 2010, 18:34

Daca ai un sir de numere separate prin niste caractere bne definite, cum ar fi virgula, poti folosi strtok() pentru a acele parti ale stringului delimitate de aceste caractere speciale (intr-un ciclu). Iti recomand sa citesti in MSDN exemplul de acolo, e destul de simplu. Avand tokenul care reprezinta numarul, poti folosi atoi() pentru a converti la intreg.
Marius Bancila
Fondator Codexpert, Microsoft MVP VC++
Site personal | Blog
Avatar utilizator
Marius Bancila
Fondator
Fondator
 
Mesaje: 1778
Membru din: 11 Iul 2007, 11:45
Localitate: Timisoara


Înapoi la Limbajul C++

Cine este conectat

Utilizatorii ce navighează pe acest forum: Niciun utilizator înregistrat şi 2 vizitatori

cron