[問題]不知為何 會出現亂碼

看板C_and_CPP (C/C++)作者 (JOU)時間16年前 (2009/02/25 00:36), 編輯推噓1(101)
留言2則, 1人參與, 最新討論串1/1
我要弄一個依據輸入的xyz值做出運算所得到的M值 在讓輸入的字母進行調換 如 M=3 則 A--->D 程式碼如下 但不知為何輸出會出現亂碼 例如我輸入 1 1 8(enter) f fd 出現 g ge聶x 請按任意鍵繼續 有請高手們進行指導 剛又試了一下 該不會印出字那邊改成 cout<<str; 就可以了(我試這樣OK) 所以說是沒有字的部分出問題是嗎 #include <iostream> #include <cmath> #include <string> using namespace std; int main(void) { int x,y,z,i; float temp; float M; char str[50]; cin>>x>>y>>z; //輸入x y z 值 cin.get(); //由於按下的一次enter會被讀取,若少這行cin.getline會讀取 // enter的動作而繼續進行後面的程式碼 cin.getline(str,50,'\n'); // 輸入原始字串 temp=pow(x,1.75)-pow(y,1.75); //先算出決定字母要移幾個位的M值的積分部分 M=(float)4/7*temp+(float)8/z; //算出移幾個位的M值 for(i=0;i<50;i++) {if(str[i]>=65&&str[i]<=90) //使用十進位制以判斷出是大寫的才進行 {str[i]=str[i]+(int)M; // 移位 while(str[i]>=91) { str[i]=str[i]-26; //若大於A~Z所被給予的數字範圍,則 //不斷減少26使其回至範圍內 } while(str[i]<=64) //若小於A~Z所被給予的數字範圍,則不 //斷增加26使其回至範圍內 { str[i]=str[i]+26; } } else if(str[i]>=97&&str[i]<=122) //使用十進位制以判斷出是小寫的才進行 {str[i]=str[i]+(int)M; // 移位 while(str[i]>=123) {str[i]=str[i]-26; //若大於a~Z所被給予的數字範圍,則不 // 斷減少26使其回至範圍內 } while(str[i]<=96) //若小於a~Z所被給予的數字範圍,則不 // 斷增加26使其回至範圍內 {str[i]=str[i]+26; } } else continue; //若輸入的並非是字母,即非所需做改變 //的intput,便跳回至for迴圈處理下一個 } for(i=0;i<50;i++) //以迴圈印出output { cout<<str[i]; } system("pause"); return 0; } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.45.66.185 ※ 編輯: DiLegend 來自: 114.45.66.185 (02/25 00:47)

02/25 01:03, , 1F
你印字的迴圈只要印到字串長度即可
02/25 01:03, 1F

02/25 01:04, , 2F
<cstring>裡有個strlen可以用
02/25 01:04, 2F
文章代碼(AID): #19f28FF1 (C_and_CPP)
文章代碼(AID): #19f28FF1 (C_and_CPP)