1樓:匿名使用者
原因是你把字元和字串的概念搞混了.
char 只定義了一個位元組,也就是一個acsii字元.
而一個字串是由多個char組成的,通常以0結尾.常量表達時用雙引號"字串"
一箇中文字元佔用兩個位元組, abcd1236386 同學留下的**是可以參考的,但是仍然有很大的問題,就是給name1[2]和name2[2]只定義了2個預留字元空間, 沒有為最後標識結尾的0預留空間, 程式執行起來看上去也許是正常的,實際上確有很大的漏洞,因為在你輸入中文時,增加的0結尾字元會被寫到沒有分配的空間,從而造成破壞.
題外話:
當然這麼簡單的程式是不會造成很大的影響,而且通常編譯器會對齊訪問空間也就是說name1[2]實際在編譯器分配了4個位元組(要看你的編譯器是不是開啟了這方面的優化引數), 所以只要輸入的字元不超過3個,執行起來都會看上去很正常...
2樓:匿名使用者
因為一個漢字是兩個字元!!
所以你輸入姓一個漢字就輸入了兩個,name1和name2合起來是一個「張」
所以就不行了,應該是用陣列
char name1[2],name2[2];
但是這樣就不能直接寫name1==『張』了,應該用if(strcmp(name1,「張」)==0&&strcmp(name2,"三"))
標頭檔案應該包含
#include
//源程式已改好
#include
#include
void main()}
3樓:匿名使用者
char 型別只函有一個位元組字元,中文每個字有兩個位元組所以入張後name1,name2就全入完了,一共兩個位元組,它們兩個共同組成張字編碼
將張三換成英語字母就應該可以了,
建議:剛開始學程式最好不要用中文,呵呵
4樓:匿名使用者
因為你原先定義的char name1,name2是一個位元組的大小,而「張」是兩個位元組,c++中自動將一部分賦值給了name2,導致以上的情況
5樓:
#include
using namespace std;
int main()
這樣就可以了。。 後面的名輸入前,要輸入個換行就可以了。。你試試吧!
6樓:匿名使用者
解決的辦法是定義的時候
char name1;
char name2;就好了
7樓:匿名使用者
把花括號去了
8樓:lr_離
因為你吧「回車」賦給了name2……
有關C語言的幾個問題,有關C語言幾個問題
1 不能,通不過編繹的。2 可以根據返回一個標誌來實現跳轉。如int fun 如果成功就返回1,否則返回0。看來樓主對函式理解還不夠透徹。舉個例子吧 int fun int a,int b 就像上面那個,其中括號內的int a和int b表示這個函式需要傳入引數兩個,並且這兩個引數為int型別,第一...
有關C語言的小問題,關於C語言的幾個小問題
line 69 函式showarr,parr是指向結構體的指標,你這裡要訪問的應該是它的成員陣列parr pbase void showarr struct arr parr ps1 這個問題在編譯階段通常會有警告的,因為printf格式符 d是整數,你給的parr i 跟它是不匹配的,會引起 fo...
有關於C 的幾個問題
1.變數的儲存型別,主要就是決定了這個變數的屬性,extern指明瞭這個變數的定義不在這裡,它只是一個變數的宣告,就是一個通告,static限制了變數的有效作用域,並且在這個有效的作用域它都是存在的,因為它儲存在靜態儲存區。全域性靜態變數限定了這個變數只是在當前檔案中是可見的,即可以使用的,區域性靜...