2013-04-24 17 views
-1

有一個我在C寫的程序,它完美的作品。當我試圖將它翻譯成C#語言時,它並沒有編譯。問題是,C#不知道scanf ("%19s" , string1);含義類似於C
我改變scanf到:程序應該給一個字的特殊數值(但...)

string read; 
do 
{ 
    read = Console.ReadLine(); 
} 
while (read.Length <= 19); 

它不能正常工作。然後我想:它換成:

string string1Input = Console.ReadLine(); 

這是工作好,但並沒有檢查if陳述,因爲我得到的一切「和」 -S等於0

這是寫在程式編譯到C#:

public static class GlobalMembersAnbanisRicxvitiMnishvneloba 
{ 
    static int Main() 
    { 
     string string1 = new string(new char[20]); 
     sbyte a = (sbyte)'a'; 
     sbyte b = (sbyte)'b'; 
     sbyte g = (sbyte)'g'; 
     sbyte X = (sbyte)'X'; 
     sbyte i = (sbyte)'i'; 
     sbyte H = (sbyte)'H'; 
     sbyte V = (sbyte)'V'; 
     etc.. 

     int rigi; 
     int sum = 0; 
     int sum2 = 0; 
     int sum3 = 0; 

     Console.Write(" my word is:\n"); 

     string string1Input = Console.ReadLine(); 

     for (rigi = 0; string1[rigi] != '\0'; rigi++) 
     { 
      if (string1[rigi] == a) 
      { 
       sum3 = sum3 + 1; 
       sum2 = sum2 + 1; 
       sum = sum + 1; 
      } 
      else 
      if (string1[rigi] == b) 
      { 
       sum3 = sum3 + 3; 
       sum2 = sum2 + 2; 
       sum = sum + 2; 
      } 


       etc... 
      } /* end for*/ 
    if (string1[rigi-1]==i) 
{ 
sum=sum-10; sum2=sum2-10; sum3=sum3-55; 
} 
      Console.Write("sum is:"); 
      Console.Write("{0:D}\n", sum); 
      Console.Write("sum2 is:"); 
      Console.Write("{0:D}\n", sum2); 
      Console.Write("sum"); 
      Console.Write("{0:D}\n", sum3); 
      return 0; 
     } 
    } 

的前衛的想法是:
計劃給出了一個數值的含義每次我們輸入一個字的信,並將此號碼給對方。

問題二:如何讓

if (string1[rigi-1]==i) 
    { 
    sum=sum-10; sum2=sum2-10; sum3=sum3-55; 
    } 

工作?

+1

這就是爲什麼你應該這樣做的手... – Arran 2013-04-24 10:03:07

+3

你的代碼是基於很多假設,對於C而言是正確的,但不是C#。例如,C#中的字符串不會由「\ 0」字符終止。翻譯代碼需要深入瞭解這兩種語言;嘗試在C#中從頭開始實現您的程序,如果您還不熟悉C#。 – dtb 2013-04-24 10:04:05

+0

爲什麼有這麼多'a,b,g,H'等變量? 'if(oneCharacter =='a')'同樣適用。 – 2013-04-24 10:57:03

回答

0

在C#中沒有像C那樣的結束字符串。事實上,C中的字符串和C#中的字符串是兩個完全不同的東西,並且使用的方式不同。

因此,對於字符串循環,最好的方法是使用foreach循環。
變化

for (rigi = 0; string1[rigi] != '\0'; rigi++) 

通過

foreach(var oneCaracter in string1Input) 

然後string1[rigi]必須成爲oneCaractersbyte必須成爲char

樣品修正:

char a = 'a'; 
int sum = 0; 
int sum2 = 0; 
int sum3 = 0; 

string string1Input = Console.ReadLine(); 

foreach(char oneCaracter in string1Input) 
{ 
    if (oneCaracter == a) 
    { 
     sum3 = sum3 + 1; 
     sum2 = sum2 + 1; 
     sum = sum + 1; 
    } 
} 

if (string1Input[string1Input.Length - 1] == i) 
{ 
    sum = sum - 10; sum2 = sum2-10; sum3 = sum3-55; 
} 
+0

我不需要初始化'c'嗎?或者如果我已經將字母c初始化爲'char c ='c';' – Gio 2013-04-24 10:15:06

+0

@Gio:你說得對,將會聲明兩個'c'變量。然後給出另一個名字。看到我編輯的答案。 – 2013-04-24 10:18:31

+0

謝謝你所有的工作。我用新的價值「M」我沒有初始化它。現在它完美的工作 – Gio 2013-04-24 10:25:41

相關問題