为什么我输入字符串的函数不起作用?

Why does my function for inputting a string not work?

#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 循环后输出。但是我不知道如何解决这个问题。如何检测空格和换行符?

这一行有问题:

    if (Test != '\r') sentence[i] == Test;

这里你用的是相等运算符==,而你打算使用赋值运算符=

此外,请注意,在您的 for 循环中,您应该使用 < 而不是 <= 以避免超过 运行 数组的长度。

您可以更改它 (here)。试试这个:

#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] = '[=10=]';
            break;
        }
    }

    for (int i = 0; sentence[i]; i++) {
        cout << sentence[i];
    }
    return 0;
}

C++流操作器的noskipws方法用于清除指定str流的showbase格式标志。此标志读取输入流中第一个非空白字符之前的空白。