#include <iostream>
void main()
{
using namespace std;
char sentence[2000];
for (int i = 0; i <= 2000; i ) {
char Test;
cin >> Test;
if (Test != '\r') sentence[i] == Test;
else break;
}
for (int i = 0; i <= 2000; i ) {
cout << sentence[i];
}
}
為什么我輸入字串的功能不起作用?我撰寫了這個程式,它應該接受用戶的輸入,并在用戶按下回車鍵時顯示句子。我知道 C 中有函式可以做到這一點,但我想自己撰寫這樣的程式。我是初學者,所以請保持初學者友好的答案。我想知道為什么這不起作用以及如何使它起作用。當我運行這個程式時會發生什么,即使我按下回車鍵,輸入也會繼續。
編輯:2好吧,在閱讀評論后。我將我的代碼編輯為:
#include <iostream>
int main()
{
using namespace std;
char sentence[2000];
for (int i = 0; i < 2000; i ) {
char ch;
cin >> ch;
if (ch != '\n') sentence[i] = ch;
else break;
}
for (int i = 0; i <= 2000; i ) {
cout << sentence[i];
}
return 0;
}
預期結果:剛剛輸入的句子在按下回車鍵時被輸出回來。
會發生什么:游標轉到下一行,要求更多輸入。
編輯:3 我將 2000 更改為 5 并注意到了這種行為。問題是 ch 的 char 宣告沒有檢測到空格或換行符之類的東西,因此程式只會在 'i' 完全回圈并且我們退出 for 回圈后才輸出。但是我不知道如何解決這個問題。如何檢測空格和換行符?
uj5u.com熱心網友回復:
你可以改變它(在這里)。試試這個:
#include<iostream>
using namespace std;
int main(int argc, char * argv[])
{
char sentence[2000];
char ch;
for (int i = 0; i < 2000; i ) {
cin >> noskipws >> ch;
if (ch != '\n') sentence[i] = ch;
else {
sentence[i] = '\0';
break;
}
}
for (int i = 0; sentence[i]; i ) {
cout << sentence[i];
}
return 0;
}
所述noskipws在C 流操縱的方法用于清除showbase格式標志為指定的STR流。此標志讀取輸入流中第一個非空白字符之前的空白。
uj5u.com熱心網友回復:
問題在于這一行:
if (Test != '\r') sentence[i] == Test;
==當您打算使用賦值運算符時,這里使用的是相等運算符=。
此外,請注意,在您的for回圈中,您應該使用<而不是<=避免超出陣列的長度。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/407629.html
標籤:
上一篇:如何垂直求和字串的數字?
