大数字,输入字符[]

时间:2015-11-05 10:54:35

标签: c++

我遇到以下代码问题:

#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?

4 个答案:

答案 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::getcin.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;

此示例代码将简单地读取一行并在标准输出中逐字输出。