iT邦幫忙

0

【已解答】關於C++的cin.getline函數

  • 分享至 

  • xImage

我有爬文找關於這個函數的用法,但我找不到為什麼會這樣!https://ithelp.ithome.com.tw/upload/images/20201208/20133244tNNl4OepLy.png
我輸入b之後,會把上一個a的值給蓋掉,只留下第一個字元!
請問是我哪個部分寫錯嗎? 還是有什麼概念我沒有了解到?

以下是我的程式碼:

#include<iostream>
using namespace std;
char a[]={},b[]={};
int main()
{
    cout << "Enter a: ";
    cin.sync();
    cin.getline(a,100,'\n');

    cout << "a: ";
    for(int i = 0 ; i < 100 ; i++){
        if (a[i]=='\0')
            break;
        cout << a[i] ;
    }
    cout << endl;
    cout << "Enter b: ";
    cin.sync();
    cin.getline(b,100);

    cout << "b: ";
    for(int i = 0 ; i < 100 ; i++){
        if (b[i]=='\0')
            break;
        cout << b[i] ;
    }
    cout << endl;

    cout << "a: ";
    for(int i = 0 ; i < 100 ; i++){
        if (a[i]=='\0')
            break;
        cout << a[i] ;
    }
    cout << endl;
    return 0;
}

感謝協助!!

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

0
海綿寶寶
iT邦大神 1 級 ‧ 2020-12-09 09:15:19
最佳解答

https://ithelp.ithome.com.tw/upload/images/20201209/20001787NnDdXOsMJj.png

原因可能是在宣告方式a[]={}, b[]={}
由上圖可看出此兩者的位址只差一個 byte(剛好是一個字元)
a[100], b[100]的宣告方式
就會有完全「分開」的記憶體位址/空間

#include<iostream>
using namespace std;
char aa[]={}, bb[]={};
char a[100], b[100];
int main()
{
    cout << (void *)aa << endl;
    cout << (void *)bb << endl;
    
    cout << (void *)a << endl;
    cout << (void *)b << endl;
    
    cout << "Enter a: ";
    cin.sync();
    cin.getline(a,100,'\n');

    cout << "a: ";
    for(int i = 0 ; i < 100 ; i++){
        if (a[i]=='\0')
            break;
        cout << a[i] ;
    }
    cout << endl;
    cout << "Enter b: ";
    cin.sync();
    cin.getline(b,100);

    cout << "b: ";
    for(int i = 0 ; i < 100 ; i++){
        if (b[i]=='\0')
            break;
        cout << b[i] ;
    }
    cout << endl;

    cout << "a: ";
    for(int i = 0 ; i < 100 ; i++){
        if (a[i]=='\0')
            break;
        cout << a[i] ;
    }
    cout << endl;
    return 0;
}

另外請教一下
你都解得出動態規劃的題目
為什麼還會有 getline 的問題呢?
這兩個題目的難度
差距很大哩...
/images/emoticon/emoticon06.gif

aa232399 iT邦新手 5 級 ‧ 2020-12-09 18:25:31 檢舉

的確是這樣耶!!!我以為宣告了就會完全獨立,感謝感謝!解惑了!
至於動態規劃那個難度確實對我來說不簡單,但我覺得他難在要想怎麼架構程式,而這個是我對程式的語法內容不夠了解!
最近才剛學習cin.getline()這是在pointer的章節教的!

了解了,謝謝回覆
/images/emoticon/emoticon41.gif

0
老頭
iT邦新手 4 級 ‧ 2020-12-09 09:08:25

char a[]={},b[]={};
改成
char a[100],b[100];
看看

aa232399 iT邦新手 5 級 ‧ 2020-12-09 18:26:46 檢舉

謝謝!您是對的!!感謝您的回答,但因為上面回答比較詳細所以我給他最佳解答,抱歉了

我要發表回答

立即登入回答