為什麼將下面這段程序代碼中的for循環加上大括弧會出現異常的結果?(不加的話結果正常輸出。)
#include &
using namespace std;
int main()
{
char str1[ ]="i am 1900";
char str2[30],*p1,*p2;
p1=str1;
p2=str2;
for(;*p1!=" ";p1++,p2++)
*p2=*p1;
*p2=" ";
p1=str1;
p2=str2;
cout&<&<"str1 is: "&<&
你把C++當Python了?
具體哪裡加大括弧?
縮進不能定義代碼塊。。。。
/* 我沒學過cpp, 用c寫的不過不影響你閱讀 */
1 #include &
2
3
4 int main(int argc, char * argv[])
5 {
6 char str1[ ]="i am 1900";
7 char str2[30],*p1,*p2;
8
9 p1=str1;
10 p2=str2;
11
12 for ( ;*p1!=" "; p1++,p2++)
13 {
14 *p2=*p1;
15 } //你代碼運行是這樣的
16 *p2=" ";
17
18 p1=str1;
19 p2=str2;
20 printf ("str1 is: %s
", p1);
21 printf ("str2 is: %s
", p2);
22
23
24 return 0;
25 }
//運行結果
/* 按你那縮進加入{}後是這樣 */
1 #include &
2
3
4 int main(int argc, char * argv[])
5 {
6 char str1[ ]="i am 1900";
7 char str2[30],*p1,*p2;
8
9 p1=str1;
10 p2=str2;
11
12 for ( ;*p1!=" "; p1++,p2++)
13 { //如果按照你的縮進加{}, 編譯沒報錯, gdb也能調試;
14 *p2=*p1;
15 *p2=" ";
16 }
17
18 p1=str1;
19 p2=str2;
20 printf ("str1 is: %s
", p1);
21 printf ("str2 is: %s
", p2);
22
23
24 return 0;
25 }
//運行結果
你這明顯是之前寫Python,再轉到C++結果精分了吧,我以前也這麼搞過。C++的for循環又不是靠縮進區分的
根據你的縮進來看是想把*p2=" "; 也放到循環里?
- 錯誤1:不加大括弧for while if都只會對後面的一句有效,所以說編譯器看的是大括弧不是看縮進
- 錯誤2:如果想要把*p2放到大括弧里,那麼就是每複製一個字元都加一個 ,當然不對了
#include &
using namespace std;
int main()
{
char str1[ ]="i am 1900";
char str2[30],*p1,*p2;
p1=str1;
p2=str2;
for(;*p1!=" ";p1++,p2++) {
*p2=*p1;
}
*p2=" ";
p1=str1;
p2=str2;
cout&<&<"str1 is: "&<&
題主,縮進當代碼塊?你跟Python應該有緣,先把C++放一放,把Python搞起。
for循環的循環體可以是單個語句(包括空語句),也可以是一個語句塊(其實你也可以把一整個語句塊當成一條語句)。
當你不加大括弧時,for循環的循環體就只是 *p2=*p1;
當你加了大括弧時,for循環的循環體變成了 { *p2=*p1; *p2=" "; }這和Python不一樣的C++不是python, 不能用縮進取代花括弧 〒_〒而且這代碼中縮進也是匪夷所思…… 縮進了 return 0; 是幾個意思?
用C++應該這樣#include using namespace std; int main() {
char str1[ ]="i am 1900";
char str2[30],*p1,*p2; p1=str1; p2=str2; while(*p1!=" ") { strncpy(p2,p1,sizeof(p1)); } coutcoutreturn 0; }題主挺萌的,乃們不要黑她
題主釣魚 哈哈哈
推薦閱讀:
※如何看待王垠最新更新的博文《更新》?
※計算機語言中是如何處理sin函數的?
※C++中為什麼vector的讀寫速度比原生數組快?
※有沒有簡單一點的Python小例子小項目?
※如何用通俗易懂的語言解釋《Flask 框架作者希望看到的 Python》到底在說什麼?