雖然C語言使用gets似乎沒有問題,但是C++在使用getline的時候會抓到換行符號(黑人問號??)
我自己也好奇是測資塞的還是系統問題,所以我對於輸入的字串有再處理換行符號
字串處理完之後就能照我的想法AC了,競賽應該不至於有這問題
一開始輸入n之後
呼叫個cin >> ws
雖然C語言使用gets似乎沒有問題,但是C++在使用getline的時候會抓到換行符號(黑人問號??)
我自己也好奇是測資塞的還是系統問題,所以我對於輸入的字串有再處理換行符號
字串處理完之後就能照我的想法AC了,競賽應該不至於有這問題
getline( cin , str ); 應該讀取整行是沒有錯的
但是一開始使用cin 去讀取數字的時候
並沒有把換行讀進去
所以剩下一個 (空字串) + (一個換行)
像題目一開始輸入: 3\n
通常都是用cin >> t;讀取
這個時候若要再用getline去讀整行的情況
記得要用cin.get();把空字串讀掉
如果不放心的話
可以這樣
do{
cin.get( next_char );
}while ( next_char != '\n');
雖然C語言使用gets似乎沒有問題,但是C++在使用getline的時候會抓到換行符號(黑人問號??)
我自己也好奇是測資塞的還是系統問題,所以我對於輸入的字串有再處理換行符號
字串處理完之後就能照我的想法AC了,競賽應該不至於有這問題
getline( cin , str ); 應該讀取整行是沒有錯的
但是一開始使用cin 去讀取數字的時候
並沒有把換行讀進去
所以剩下一個 (空字串) + (一個換行)
像題目一開始輸入: 3\n
通常都是用cin >> t;讀取
這個時候若要再用getline去讀整行的情況
記得要用cin.get();把空字串讀掉
如果不放心的話
可以這樣
do{
cin.get( next_char );
}while ( next_char != '\n');
我也是認為getline會讀取整行,所以將所有涉及讀取的部分全部使用getline實行,目的跟你的想法一樣
你們可以用下面的程式碼測試看看
#include <iostream>
#include <algorithm>
#include <string>
#include <iterator>
using namespace std;
int main (){
int n;
string sn;
while(getline(cin, sn)){
n = stoi(sn);
for(int i = 1; i <= n; i++){
string s1, s2;
getline(cin, s1);
getline(cin, s2);
copy(s1.begin(), s1.end(), ostream_iterator<int>(cout, " "));
cout << endl;
copy(s2.begin(), s2.end(), ostream_iterator<int>(cout, " "));
cout << endl;
}
}
return 0;
}
在迴圈內的兩行getline這裡會出問題,當時我把輸入字串整個用ascii number印出來才抓到這問題
至於你的cin.get做法我還沒嘗試過,這可能是比較不容易出狀況的方法吧
雖然C語言使用gets似乎沒有問題,但是C++在使用getline的時候會抓到換行符號(黑人問號??)
我自己也好奇是測資塞的還是系統問題,所以我對於輸入的字串有再處理換行符號
字串處理完之後就能照我的想法AC了,競賽應該不至於有這問題
getline( cin , str ); 應該讀取整行是沒有錯的
但是一開始使用cin 去讀取數字的時候
並沒有把換行讀進去
所以剩下一個 (空字串) + (一個換行)
像題目一開始輸入: 3\n
通常都是用cin >> t;讀取
這個時候若要再用getline去讀整行的情況
記得要用cin.get();把空字串讀掉
如果不放心的話
可以這樣
do{
cin.get( next_char );
}while ( next_char != '\n');
我也是認為getline會讀取整行,所以將所有涉及讀取的部分全部使用getline實行,目的跟你的想法一樣
你們可以用下面的程式碼測試看看
#include
#include
#include
#include
using namespace std;
int main (){
int n;
string sn;
while(getline(cin, sn)){
n = stoi(sn);
for(int i = 1; i <= n; i++){
string s1, s2;
getline(cin, s1);
getline(cin, s2);
copy(s1.begin(), s1.end(), ostream_iterator(cout, " "));
cout << endl;
copy(s2.begin(), s2.end(), ostream_iterator(cout, " "));
cout << endl;
}
}
return 0;
}
在迴圈內的兩行getline這裡會出問題,當時我把輸入字串整個用ascii number印出來才抓到這問題
至於你的cin.get做法我還沒嘗試過,這可能是比較不容易出狀況的方法吧
有發現什麼問題嗎
看起來都蠻正常的(用題目給的測資測)
雖然C語言使用gets似乎沒有問題,但是C++在使用getline的時候會抓到換行符號(黑人問號??)
我自己也好奇是測資塞的還是系統問題,所以我對於輸入的字串有再處理換行符號
字串處理完之後就能照我的想法AC了,競賽應該不至於有這問題
getline( cin , str ); 應該讀取整行是沒有錯的
但是一開始使用cin 去讀取數字的時候
並沒有把換行讀進去
所以剩下一個 (空字串) + (一個換行)
像題目一開始輸入: 3\n
通常都是用cin >> t;讀取
這個時候若要再用getline去讀整行的情況
記得要用cin.get();把空字串讀掉
如果不放心的話
可以這樣
do{
cin.get( next_char );
}while ( next_char != '\n');
我也是認為getline會讀取整行,所以將所有涉及讀取的部分全部使用getline實行,目的跟你的想法一樣
你們可以用下面的程式碼測試看看
#include
#include
#include
#include
using namespace std;
int main (){
int n;
string sn;
while(getline(cin, sn)){
n = stoi(sn);
for(int i = 1; i <= n; i++){
string s1, s2;
getline(cin, s1);
getline(cin, s2);
copy(s1.begin(), s1.end(), ostream_iterator(cout, " "));
cout << endl;
copy(s2.begin(), s2.end(), ostream_iterator(cout, " "));
cout << endl;
}
}
return 0;
}
在迴圈內的兩行getline這裡會出問題,當時我把輸入字串整個用ascii number印出來才抓到這問題
至於你的cin.get做法我還沒嘗試過,這可能是比較不容易出狀況的方法吧
有發現什麼問題嗎
看起來都蠻正常的(用題目給的測資測)
那就是我撞鬼了,我測出來的結果是這樣:
輸入測試如下:
1
yes
yes
預期結果如下:
121 101 115 121 101 115
在測試跑出來的結果如下
您的答案為: 121 101 115 13 正確答案為: 121 101 115
所以是我的撰寫該改善嗎?
雖然C語言使用gets似乎沒有問題,但是C++在使用getline的時候會抓到換行符號(黑人問號??)
我自己也好奇是測資塞的還是系統問題,所以我對於輸入的字串有再處理換行符號
字串處理完之後就能照我的想法AC了,競賽應該不至於有這問題
getline( cin , str ); 應該讀取整行是沒有錯的
但是一開始使用cin 去讀取數字的時候
並沒有把換行讀進去
所以剩下一個 (空字串) + (一個換行)
像題目一開始輸入: 3\n
通常都是用cin >> t;讀取
這個時候若要再用getline去讀整行的情況
記得要用cin.get();把空字串讀掉
如果不放心的話
可以這樣
do{
cin.get( next_char );
}while ( next_char != '\n');
我也是認為getline會讀取整行,所以將所有涉及讀取的部分全部使用getline實行,目的跟你的想法一樣
你們可以用下面的程式碼測試看看
#include
#include
#include
#include
using namespace std;
int main (){
int n;
string sn;
while(getline(cin, sn)){
n = stoi(sn);
for(int i = 1; i <= n; i++){
string s1, s2;
getline(cin, s1);
getline(cin, s2);
copy(s1.begin(), s1.end(), ostream_iterator(cout, " "));
cout << endl;
copy(s2.begin(), s2.end(), ostream_iterator(cout, " "));
cout << endl;
}
}
return 0;
}
在迴圈內的兩行getline這裡會出問題,當時我把輸入字串整個用ascii number印出來才抓到這問題
至於你的cin.get做法我還沒嘗試過,這可能是比較不容易出狀況的方法吧
有發現什麼問題嗎
看起來都蠻正常的(用題目給的測資測)
那就是我撞鬼了,我測出來的結果是這樣:
輸入測試如下:
1
yes
yes
預期結果如下:
121 101 115 121 101 115
在測試跑出來的結果如下
您的答案為: 121 101 115 13 正確答案為: 121 101 115
所以是我的撰寫該改善嗎?
真的嗎!!!
我用你的程式跑
結果是
121 101 115
121 101 115
並沒有看到有多的13出現 (使用的是 Code:Blocks 16.01)