2011-11-25 38 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