Προς το περιεχόμενο

atoi() problem


themis

Προτεινόμενες αναρτήσεις

Δημοσ.

>             vathmos[0]=buff[strlen(buff)-3];
		vathmos[1]=buff[strlen(buff)-2];
		vathmosp=atoi(vathmos);
		printf("vathmosprosthesi!!!:%i\n",vathmosp);
		sinolo += vathmosp;

 

nomizo oti i atoi() mporei na sintaxthei opos sto paradeigma apo pano..an oxi...tote pos ti xrisimopoio gia enan aray 2 theseon opou ean o arithmos ine dipsifios p.x. 12 tote ine:

>vathmos[0]=1 vathmos[1]=2

ke ean ine monopsifios p.x. 8 ine:

>vathmos[0]=" " vathmos[1]=8

 

pos tha ginei meso tis atoi na ginete apothikefsi se mia metavliti tou arithmou pou prokiptei apo tis 2 theseis vathmos[0] kai vathmos[1]?

 

please apantiste asap.!!!

Δημοσ.
emena den doulevei m tipota...mou vgazei kati asxeta..mipos prepi na kano kapio flush i kati tetio?

 

p.s. xrisimopoio pipes

 

[stupid]Την stdlib.h την έβαλες?[/stupid]

Δημοσ.

Ρε παλικαρ ήντα κάνεις; Είναι ο πίνακας vathmos char ή είναι τίποτα int και σου βγάζει άσχετα; (γιατί έτσι όπως τον χρησιμοποιείς στα παραδείγματα επάνω για int μου φαινεται)

Δημοσ.

Δεν έχω καταλάβει τι ακριβώς ζητάς,βέβαια σου παραθέτω κώδικα που κάνει το εξής:

Αν του δώσεις ένα αλφαριθμητικό το οποίο περιέχει αριθμούς τότε μετατρέπει από τους κ πριν το τέλος χαρακτήρες σε αριθμούς και βρίσκει το άθροισμα τους. Να ξέρεις ότι η ατοι χειρίζεται αλφαριθμητικά και όχι χαρακτήρες, δεν καταλαβαίνω τι ακριβώς θέλεις να κάνεις, γράφε καθαρά γιατί δεν μπορούμε να μυρίζουμε τα νυχια μας...

 

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

//Function Prototypes

int converStringToNumber(char *str, int k, int *sum);

int main(int argc, char *argv[])
{
 int sum  = 0;
 int i  = 0;
 char *string = "129823";
 i = converStringToNumber(string,5,&sum);
 if(!i)
 printf("Sum of values is %d\n",sum);
 system("PAUSE");	
 return 0;
}

int converStringToNumber(char *str, int k, int *sum)
{
   if(str)
   {
          int i = 0;
          int l = 0;
          char *value  = (char*)calloc(k,sizeof(char));
          if(value)
          {
                   for(i = k; i > 0; i--)
                   {
                         char *p = &str[strlen(str) - i];
                         value[l] = p[0];
                         *sum += atoi(&value[l]);
                         l++;
                   }
                   if(l == k)
                   return 0;
                   else
                   {
                       free(value);
                       return -1;
                   }
          }
          else
          return -2;
   }
   else
   return -3;
}

 

Αυτό είναι κάτι πρόχειρο που γράφτηκε σε 5 λεπτά οπότε αν διευκρινίσεις τι ζητάς θα γίνει κάτι!!!

Δημοσ.
>             vathmos[0]=buff[strlen(buff)-3];
		vathmos[1]=buff[strlen(buff)-2];
		vathmosp=atoi(vathmos);
		printf("vathmosprosthesi!!!:%i\n",vathmosp);
		sinolo += vathmosp;

 

nomizo oti i atoi() mporei na sintaxthei opos sto paradeigma apo pano..an oxi...tote pos ti xrisimopoio gia enan aray 2 theseon opou ean o arithmos ine dipsifios p.x. 12 tote ine:

>vathmos[0]=1 vathmos[1]=2

ke ean ine monopsifios p.x. 8 ine:

>vathmos[0]=" " vathmos[1]=8

 

pos tha ginei meso tis atoi na ginete apothikefsi se mia metavliti tou arithmou pou prokiptei apo tis 2 theseis vathmos[0] kai vathmos[1]?

 

please apantiste asap.!!!

 

Όταν λες του αριθμού που προκύπτει από τις δυο θέσεις υποθέτω πως εννοείς ότι εάν έχουμε το κείμενο (char) «12» θα πρέπει να λάβουμε ως αριθμό (int) το «3».

 

Ένας σχετικά εύκολος τρόπος για να γίνει αυτό με την βοήθεια της atoi είναι να αποθηκεύσουμε σε ένα char (szNumber) κάθε αριθμητικό χαρακτήρα του προς μετατροπή κειμένου (pszString) και ύστερα μετατρέποντας το σε αριθμό (atoi) να το προσθέσουμε στο συνολικό αποτέλεσμα της μεταβλητής μας (πχ. στην nNumber):

 

>
/*---------------------------------------------------------------------------*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#ifdef __BORLANDC__
  #pragma hdrstop
#endif

/*---------------------------------------------------------------------------*/
int _StrNumberSum(char *pszString);
/*---------------------------------------------------------------------------*/

#ifdef __BORLANDC__
  #pragma argsused
#endif
int main(int argc, char* argv[])
{
  char  szNumber[11];
  int   nNumber, nDummy;

  printf("Enter number (up to 10 digits):");
  scanf("%10s",szNumber);

  nNumber =_StrNumberSum(szNumber);
  printf("Sum:%d\n",nNumber);

  return 0;
}
/*---------------------------------------------------------------------------*/
int _StrNumberSum(char *pszString)
{
  char szNumber[1];
  int nNumber = 0, nCharIdx;

  for(nCharIdx=0;nCharIdx<strlen(pszString);nCharIdx++)
   {
     szNumber[0] = pszString[nCharIdx];
     nNumber += atoi(szNumber);
   }

  return nNumber;
}

 

Η ρουτίνα _StrNumberSum αγνοεί το αρνητικό πρόσημο (δεν είναι δύσκολο να το λάβει υπόψη της πάντως).

Επίσης εάν η atoi εντοπίσει μη αριθμητικό χαρακτήρα (πχ. «1 2» αντί για «12») επιστρέφει 0 και δεν τον λογαριάζει συνεπώς στο αποτέλεσμα.

 

Υ.Γ.

Ο κώδικας αναπτύχθηκε σε (Borland) CodeGear C/C++ Builder 6.0

Δημοσ.

ευχαριστώ πάρα πολύ για τις απαντήσεις...τελικά το έλυσα το πρόβλημα...με τη βοηθειά σας παντα...

ήθελα να βρίσκω το μέσο όρο σε κάποια δεδομένα αλλά τα δεδομένα μεταφέρονταν μέσω Pipes μεταξύ των διεργασιών...εννοείται πως ήταν για εργασία στο πανεπιστήμιο.:)

ευχαριστώ και πάλι

cheers!

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...