1

ascii を int に変換する際に問題を抱えている 1 年生の大学。

問題はこのコードです

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

これを自宅のコードブロックで実行すると、正しくない値が返されます。もう一度実行すると、別の間違った値が返されます。

大学の Borlands で実行すると、画面が読める前に画面が上下するだけなので、ここでもシステム クロックを使用できません。

今はイースターなので、私は大学にいますが、家庭教師がいないので、彼らを困らせることはできません.

#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;
}
4

3 に答える 3

1

分を theTime の部分文字列に設定します。したがって、分には 2 文字あります。数分以内に位置 0 から始まる最初のもの。

したがって、この

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

minutes は 2 文字しかないため、存在しない文字 3 と 4 にアクセスするため、間違っています。位置 0 と 1 としてのみ文字があります。

これであるべき

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

またはこれを使用できます:

unsigned short iminutes = ((theTime[3]-48)*10) + (theTime[4]-48);
于 2012-04-04T09:34:55.403 に答える
0

問題は、元の文字列から位置 3 と 4 の文字を取得しても、新しい文字列は 2 文字 (つまり、インデックス 0 と 1 しかない) になることです。

于 2012-04-04T09:33:59.133 に答える
0
istringstream iss(theTime.substr(0, 2));
iss >> ihour;
于 2012-04-04T09:34:06.653 に答える