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

Why do I get random numbers after the input?

本文关键字:随机数 输入 为什么      更新时间:2023-10-16

我试图接受一些输入,并在字符串中找到某个字符的编号。当我试图接受实际字符串时,我总是得到一个奇怪的答案。为什么会发生这种情况?我正在使用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;
}

局部变量不会自动初始化为0。如果在赋值之前尝试使用局部变量的值,则会得到未定义的行为。您正在递增counting,但从未初始化过它。更改为:

int n, k, counting = 0;

问题是变量"计数"从未初始化-方便的链接

基本上,在用声明"计数"后,它会有一些来自内存的垃圾值

int counting;

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

counting++;

并且垃圾值被保存。

修复:

更改

int counting;

int counting = 0;

注意:n和k不是有用的变量名。如果他们有真名,这会让理解代码变得容易得多,但哦,好吧。

此外:正如chris上面提到的,让编译器为您工作。有关好的编译器标志,请参阅下面的注释。不要忽视警告!

我真的不明白你在这里做什么。但我能看出你哪里错了。

int n,k,计数;

计数未初始化尝试

int n,k,计数=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