为什么我输入字符串的函数不起作用?
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格式标志。此标志读取输入流中第一个非空白字符之前的空白。
#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格式标志。此标志读取输入流中第一个非空白字符之前的空白。