2012-04-04 9 views
1

ersten jahr college mit problem konvertieren ascii in int.Converting ascii substr zu int

Das Problem ist dieses Stück Code

unsigned short iminutes = ((Minuten [3] -48) * 10) + (min [4] -48);

Wenn ich dies auf Codeblocks zu Hause ausgeführt wird, gibt es einen falschen Wert zurück, wenn ich es erneut ausführen, erhalte ich einen anderen falschen Wert.

Wenn ich es auf Borlands in der Universität laufen lasse, ups und verschwindet der Bildschirm, bevor ich es lesen kann, so kann ich die Systemuhr hier auch nicht verwenden.

Es ist Ostern hols jetzt, obwohl ich am College bin, kann ich meine Tutoren nicht ärgern, weil sie nicht sind.

#include <iostream.h> 
#include <conio.h> 
#include <string> 
//#include <time.h> 
//#include <ctype.h> 


using namespace std; 

int main() { 

bool q = false; 


do { 

// convert hours to minutes ... then total all the minutes 
// multiply total minutes by $25.00/hr 
// format (hh:mm:ss) 


string theTime; 

cout << "\t\tPlease enter time " << endl; 
cout <<"\t\t"; 
cin >> theTime; 
cout << "\t\t"<< theTime << "\n\n"; 

string hours = theTime.substr (0, 2); 
cout <<"\t\t"<< hours << endl; 
unsigned short ihours = (((hours[0]-48)*10 + (hours[1] -48))*60); 
cout << "\t\t"<< ihours << endl; 

string minutes = theTime.substr (3, 2); 
cout <<"\t\t"<< minutes << endl; 
unsigned short iminutes = ((minutes[3]-48)*10) + (minutes[4]-48); 
cout << "\t\t" << iminutes << endl; 

cout << "\n\n\t\tTotal Minutes " <<(ihours + iminutes); 
cout << "\n\n\t\tTotal Value " <<(ihours + iminutes)*(25.00/60) << "\n\n"; 

} 

while (!q); 

cout << "\t\tPress any key to continue ..."; 
getch(); 
return 0; 
} 

Antwort

0

Das Problem ist, dass, obwohl Sie die Zeichen an Position 3 und 4 von der ursprünglichen Zeichenfolge zu erhalten, die neue Zeichenfolge nur zwei Zeichen sind (das heißt nur Index 0 und 1).

+1

Ein weiteres Problem ist, dass er '48' subtrahieren, anstatt'‘ 0''. (Und auch, dass er nicht bestätigt, dass er Ziffern hat, um damit anzufangen.) –

0
istringstream iss(theTime.substr(0, 2)); 
iss >> ihour; 
1

Sie Minuten gesetzt ein Teil von thetime zu sein. Also Minuten hat 2 Zeichen. Der erste startet innerhalb von Minuten auf Position 0.

Also das

unsigned short iminutes = ((minutes[3]-48)*10) + (minutes[4]-48); 

ist falsch, da es Zeichen 3 und 4 in Minuten zugreift, die nicht existieren, weil Minuten nur zwei Zeichen lang ist. Es hat nur Zeichen als die Positionen 0 und 1.

diese

unsigned short iminutes = ((minutes[0]-48)*10) + (minutes[1]-48); 

sein sollten oder könnten Sie dies:

unsigned short iminutes = ((theTime[3]-48)*10) + (theTime[4]-48); 
+0

Ehrfürchtig ... danke dafür und all die anderen Antworten – Phill