输入后为什么我会得到随机数?

时间:2014-08-29 00:04:56

标签: c++

我正在尝试接受一些输入并找到字符串中某个字符的编号。当我尝试接收实际的字符串时,我总是得到一个奇怪的答案。为什么会这样? 我正在使用cout来查找为什么我会收到如此奇怪的数字,这似乎是输入的问题。

注意 - 这是我尝试解决Codeforces问题462 B.我试图找到输入中某个字母的编号。我的朋友正在尝试冒泡排序方法。

输入:

6 4
YJSNPI

预期产出:

YJSNPI
4

实际输出:

YJSNPI
1699623981

代码:

#include <iostream>
#include <string>
#include <vector>
#include <istream>

using namespace std;

int main()
{
    int n, k, counting;
    cin >> n >>k;
    char trash;
    cin.get(trash);
    vector<string> cards;
    string theline, name;
    cin >> theline;
    cout << theline << "\n";
    for (int i = 0; i < n; i++){
        name = theline[i];
        cards.push_back(name);
    }
    for (int i = 0; i < n; i++){
        if (cards[i] == cards[k-1]){
            counting++;
        }
    }
    int tmp = 0;
    if (cards.size() != k){
        tmp = k - counting;
    }
    counting *= k;
    counting += tmp;
    cout << counting;
    return 0;
}

3 个答案:

答案 0 :(得分:4)

本地变量不会自动初始化为0。如果在分配之前尝试使用局部变量的值,则会得到未定义的行为。您在没有初始化的情况下递增counting。改为:

int n, k, counting = 0;

答案 1 :(得分:3)

问题是变量“count”从未初始化 - handy link

基本上,“计数”在用

声明之后会从内存中获得一些垃圾值
int counting;

然后,执行的第一个操作是

counting++;

并保存垃圾值。

THE FIX:

更改

int counting;

int counting = 0;

注意:n和k对变量名称没有帮助。如果它们有真实的名字,它会使代码更容易理解,但是很好。

此外: 正如上面提到的克里斯,让编译器为你工作。有关良好的编译器标志,请参阅下面不要忽视警告!

答案 2 :(得分:0)

无法真正理解你在这里做了什么。但我可以看到你哪里出错了。

int n,k,counting;

计数未初始化尝试

int n,k,counting = 0;

我得到(1 * 4 + 4 - 1)= 7的回答而不是你期望的4。

如果k在范围内,则此代码将始终导致计数= 1.

for (int i = 0; i < n; i++){
    if (cards[i] == cards[k-1]){
        counting++;
    }
}

https://ideone.com/7Hk3ix