我遇到以下代码问题:
#include<iostream>
using namespace std;
int main()
{
char a[200];
int i;
for (i = 0; cin.get() != '\n'; i++) {
cin >> a[i];
}
cout << i;
system("pause");
return 0;
}
我不知道为什么当我输入没有空格10 char时。 i si等于10/2 = 5?
答案 0 :(得分:0)
您丢弃每个奇数符号,cin.get()
读取符号1,
cin >>
读取符号2,再次cin.get()
读取符号3,
并且cin >>
从标准输入读取符号4.
答案 1 :(得分:0)
你得到两个字符,一旦递增i变量,只有第二个字符插入数组
int main()
{
char a[200];
int i;
\\ cin.get() - get one char and insert it in a[i]
\\ after that, compare this value with '\n'
\\ if equal, break the loop, if different, continue
for (i = 0; (a[i] = cin.get()) != '\n'; i++);
\\ last character ('\n') should be replaced with '\0'
a[i]='\0';
cout << i;
system("pause");
return 0;
}
解决方案:
int main()
{
char a[200];
int i=0;
cin >> a[i];
while (a[i] != '\n')
{
i++;
cin >> a[i];
}
a[i]='\0';
cout << i;
system("pause");
return 0;
}
做 - 解决方案:
int main()
{
char a[200];
int i=0;
do
{
cin >> a[i];
}
while(a[i++]!='\n');
a[i-1]='\0';
cout << i-1;
system("pause");
return 0;
}
答案 2 :(得分:0)
您丢失了cin
个结果的一半。
当您使用cin
时,会读取一个字符,但您不会将其分配给for
循环条件中的任何内容;只有在循环体内才能保存它。
在循环内部,您读入另一个字符(在循环测试标准期间已经读过的字符之后)并分配 一个字符。循环重复, next 字符读取再次被行cin.get() != '\n'
丢弃,因为您没有将结果分配给任何内容。而且这种情况还在继续,你扔掉的角色会被你带走的角色拯救掉#34;进入阵列。
答案 3 :(得分:0)
事实上,您正在以两种不同的方式阅读标准输入(std::cin
),每两次字符提取仅存储一次输出。
std::basic_istream::get
(cin.get()
)从流中提取字符或字符。一旦提取,乳清被遗忘,被送到冷宫。你只是忽略它们。这不是我怀疑你想做的事。
std::basic_istream::operator>>
(cin >> ...
)也提取字符或字符(遵循右侧操作数的类型)。
因此,输入十个字符后,在for
条件检查中忽略其中五个,并在循环块中存储五个。
读取字符的正确方法是使用std::getline
(en.cppreference.com/w/cpp/string/basic_string/getline):
std::string input;
std::getline(cin, input);
std::cout << input << std::endl;
此示例代码将简单地读取一行并在标准输出中逐字输出。