2011-11-25 45 views
2

我是新來的編程,特別是C++,所以我決定重新編寫一個我寫的轉換數字(例如13)到單詞(十三)的Java程序,它運行良好,但我試過用C++重新編寫它,編譯後,啓動程序,並輸入數字,它什麼都不做。如果像我的變量的名字是不尋常的,我很抱歉。我的C++程序沒有做任何事

這是java程序:

public class Say 
{ 
//AAAARRRRRR!!!! Here be Arrrrrrays! 
static String first[] = 
{ 
    "" , "One " , "Two " , "Three ", "Four ", "Five " , "Six " , 
    "Seven " , "Eight " , "Nine " , "Ten " , "Eleven " , "Twelve " , 
    "Thirteen " , "Fourteen " , "Fifteen " , "Sixteen " , "Seventeen " , 
    "Eighteen " , "Nineteen " 
}; 

static String second[] = 
{ 
    "" , "" , "Twenty " , "Thirty " , "Fourty " , "Fifty " , 
    "Sixty ", "Seventy " , "Eighty " , "Ninety " 
}; 

static String sections[] = 
{ 
    "" , "Hundred " , "Thousand " , "Million " , "Billion " 
}; 
//Number stuff ho! 
public static void main(String[] args) 
{ 
    String origin = (args[0]); 
    int original = Integer.parseInt(origin); 
    int orlength = origin.length(); 
    int remaindr = (orlength % 3); 
    int legroups; 
    if (remaindr != 0) 
    { 
     legroups = (orlength/3 + 1); 
    } 
    else 
    { 
     legroups = (orlength/3); 
    } 

    //Groups AAAARRR here matey! 
    int groupone = (original % 1000); 
    int grouptwo = (((original % 1000000) - groupone)/1000); 
    int groupthr = (((original % 1000000000) - grouptwo)/1000000); 



    //[Pirate themed comment on this being a loop] 
    boolean finished = false; 
    int takestep = 0; 
    while (finished == false) 
    { 
     takestep ++; 
     int numinact; 
     if (takestep == 1) 
     { 
      numinact = groupthr; 
     } 
     else if (takestep == 2) 
     { 
      if (groupthr != 0) 
      { 
       System.out.print(sections[ 3 ]); 
      } 
      numinact = grouptwo; 
     } 
     else 
     { 
      if (grouptwo != 0) 
      { 
       System.out.print(sections[ 2 ]); 
      } 
      numinact = groupone; 
      finished = true; 
     } 
     if (numinact > 99) 
     { 
      int hundreds = ((numinact - (numinact % 100))/100); 
      System.out.print(first [ hundreds ] + sections [ 1 ]); 
      numinact = (numinact % 100); 
     } 
     if (numinact <= 19) 
     { 
      System.out.print(first [ numinact ]); 
     } 
     else if (numinact <= 29) 
     { 
      int digitact = (numinact - 20); 
      System.out.print(second[ 2 ] + first[ digitact ]); 
     } 
     else if (numinact <= 39) 
     { 
      int digitact = (numinact - 30); 
      System.out.print(second[ 3 ] + first[ digitact ]); 
     } 
     else if (numinact <= 49) 
     { 
      int digitact = (numinact - 40); 
      System.out.print(second[ 4 ] + first[ digitact ]); 
     } 
     else if (numinact <= 59) 
     { 
      int digitact = (numinact - 50); 
      System.out.print(second[ 5 ] + first[ digitact ]); 
     } 
     else if (numinact <= 69) 
     { 
      int digitact = (numinact - 60); 
      System.out.print(second[ 6 ] + first[ digitact ]); 
     } 
     else if (numinact <= 79) 
     { 
      int digitact = (numinact - 70); 
      System.out.print(second[ 7 ] + first[ digitact ]); 
     } 
     else if (numinact <= 89) 
     { 
      int digitact = (numinact - 80); 
      System.out.print(second[ 8 ] + first[ digitact ]); 
     } 
     else if (numinact <= 99) 
     { 
      int digitact = (numinact - 90); 
      System.out.print(second[ 9 ] + first[ digitact ]); 
     } 
    }  
    //Yarrr! Debug be what this is! 
    //System.out.println(" original is " + original + ", orlength is " + 
    // orlength + ", remaindr is " + remaindr + ", legroups is " + 
    // legroups + ", groupone is " + groupone + ", grouptwo is " + 
    // grouptwo + ", groupthr is " + groupthr); 
} 

}

這是C++重寫不工作:

//C++ port of the Say.java program. 
//I hope to extend to longer numbers in the future. 

#include <iostream> 
#include <string> 

using namespace std; 

static string digit [20] = 
{ 
"" , "One " , "Two " , "Three ", "Four ", "Five " , "Six " , "Seven " , 
"Eight " , "Nine " , "Ten " , "Eleven " , "Twelve " , "Thirteen " , 
"Fourteen " , "Fifteen " , "Sixteen " , "Seventeen " , "Eighteen " , 
"Nineteen " 
}; 

int main() 
{ 
int original; //declare int 
cout << "Enter your number: "; //Requests user input 
cin >> original; //Recieves user input assigns value to previous variable 
//Groups of 3 digits 
int groupone = (original % 1000); 
int grouptwo = ((original/1000) % 1000); 
int groupthr = (original/1000000); 

//Intense loop, almost direct from java version. 

bool finished = false; 
int takestep = 0; 
while (finished != true); 
{ 
    takestep ++; 
    int numinact; 
    if (takestep == 1) 
    { 
     numinact = groupthr; 
    } 
    else if (takestep == 2) 
    { 
     if (groupthr != 0) 
     { 
      cout << "Million "; 
     } 
     numinact = grouptwo; 
    } 
    else 
    { 
     if (grouptwo != 0) 
     { 
      cout << "Thousand "; 
     } 
     numinact = groupone; 
     finished = true; 
    } 
    if (numinact > 99) 
    { 
     int hundreds = ((numinact - (numinact % 100))/100); 
     cout << digit[ hundreds ] << "Hundred "; 
     numinact = (numinact % 100); 
    } 
    if (numinact <= 19) 
    { 
     cout << digit[ numinact ]; 
    } 
    else if (numinact <= 29) 
    { 
     int digitact = (numinact - 20); 
     cout << "twenty " << digit[ digitact ]; 
    } 
    else if (numinact <= 39) 
    { 
     int digitact = (numinact - 30); 
     cout << "thirty " << digit[ digitact ]; 
    } 
    else if (numinact <= 49) 
    { 
     int digitact = (numinact - 40); 
     cout << "fourty " << digit[ digitact ]; 
    } 
    else if (numinact <= 59) 
    { 
     int digitact = (numinact - 50); 
     cout << "fifty " << digit[ digitact ]; 
    } 
    else if (numinact <= 69) 
    { 
     int digitact = (numinact - 60); 
     cout << "sixty " << digit[ digitact ]; 
    } 
    else if (numinact <= 79) 
    { 
     int digitact = (numinact - 70); 
     cout << "seventy " << digit[ digitact ]; 
    } 
    else if (numinact <= 89) 
    { 
     int digitact = (numinact - 80); 
     cout << "eighty " << digit[ digitact ]; 
    } 
    else if (numinact <= 99) 
    { 
     int digitact = (numinact - 90); 
     cout << "ninety " << digit[ digitact ]; 
    } 
} 
return 0; 
} 

我必須改變,以得到它的像java程序一樣運行?

+0

我不知道什麼是System.out.print是()在C++中。它是一個C#的東西?它打印在哪裏? Pergaps你需要cout <<然後cout.flush() –

+0

酷!我有一個項目正在做這個:http://minvg.hg.sourceforge.net/hgweb/minvg/minvg/file/5f2babcdeb12/trunk/ntt/EnUsNumber.cpp +1提醒我我應該分配一些時間爲我的sourceforge項目。 – INS

回答

10

這不會做你認爲它的作用:

bool finished = false; 
while (finished != true); 
{ 
    // blah blah blah 
    finished = true; 
} 

在那個while行末尾的分號使它成爲一個無限循環跟着塊,你永遠達不到(因爲無限循環) 。

刪除分號,你會得到:

pax$ ./testprog 
Enter your number: 1234 
One Thousand Two Hundred thirty Four 
+1

啊,流浪的分號...... –

+0

哦,謝謝你,我沒有意識到我把那裏謝謝你。 – DavidVermette

+0

@DavidVermette接受正確答案。 – Jomoos