2014-11-21 94 views
-1

當我用turbo C++ 4.5編程時,遇到問題,將char數組賦值爲另一個字符值作爲字符串的另一個char數組值但它帶有一個誤差在TC 4.5提到關於將char數組賦值給另一個char數組變量時的左值

#include <iostream.h> 
#include <conio.h> 
void main() 
{ 
    char txt[16],st[30],w[100]; 
    int i; 

i = 0; 
while((txt[i++]=getch())!='$'); 
    i--; 
    st[i] = '\0'; 
    i=0; 
while(txt[i]!='$') 
{ 
    w = txt; 
    i++; 
} 
txt[i] = '\0'; 
cout <<txt; 
if (w == "h"){ 
cout << " the pass word is:"<<txt; 
} 
else 
{ 
    cout << "incorrect"; 
} 

} 

錯誤:

左值需要在函數main()

該錯誤指向w正被分配給txt

+2

使用'std :: string' – 2014-11-21 11:10:51

+0

實際上,這是運行在turbo C++中,所以std沒有定義那個時間 – Anonyme132 2014-11-21 11:12:05

+0

使用其他編譯器,那麼您使用傳統turbo C++編譯器的任何原因? – 2014-11-21 11:12:57

回答

0

你正試圖使用​​數組,就好像它們是單個變量一樣。在C++中,他們不是。要複製數組,您必須按成員複製成員。要將它與另一個數組進行比較,您必須按成員比較其成員。

你可以通過切換

w = txt; 

w[i] = txt[i]; 

收拾你有錯誤,但不幸的是這不會讓你的代碼的工作,你希望它(它至少會編譯方式)。 使代碼工作的更簡單的方法是將其重寫爲使用字符串而不是數組,因爲它們將按照您期望數組的方式工作。您可以使用一個字符串作爲單個變量。

如果由於某種原因,你想保持陣列,我建議你寫一個函數來比較兩個人,像這樣:

bool equals_strings(char * s1, char * s2){ 
    for (int i = 0;; i++){ 
     if (s1[i] != s2[i]) 
      return false; 

     if (s1[i] == '\0')  // I checked above that they are the same, only need to check one 
      return true; 
    } 
} 

,並在代碼中使用它:

void main() 
{ 
    char txt[16], st[30], w[100]; 
    int i; 

    i = 0; 
    while ((txt[i++] = getch()) != '$'); 
    i--; 
    st[i] = '\0'; 
    i = 0; 
    while (txt[i] != '$') 
    { 
     w[i] = txt[i]; 
     i++; 
    } 
    txt[i] = '\0'; 
    cout << txt; 
    if (equals_strings("hello", txt)){  // <- Used it here! 
     cout << " the pass word is:" << txt; 
    } 
    else 
    { 
     cout << "incorrect"; 
    } 
} 

被建議:這種C++代碼是致命的,會導致你陷入各種麻煩。玩的開心! :D