为什么这个程序会给出运行时错误?

时间:2013-06-09 13:58:48

标签: c++

我正在尝试创建一个从stdin读取字符串并将其存储在字符向量中的函数,并将特殊字符的位置 - (@)存储在整数向量中。给出输入将仅包含小写字母和特殊字符,即'@'。字符和整数向量都是全局的。我无法弄清楚为什么我会收到运行时错误。这是我的代码: -

vector<int> v;
vector<char> s;

inline int input()                //called in main when we have to read input
{
    char p=getchar();
    register int i=0;
    while((p>='a'&&p<='z')||(p=='@'))  
    {
        s.push_back(p);
        if (p=='@')
        {
            v.push_back(i);
        }
        p=getchar();
        i++;
    }

    return 0;
}

2 个答案:

答案 0 :(得分:1)

<强>而((p为H. = 'A' 和;&安培; P&LT; = 'Z')||(对=='@))

你没有'@'

答案 1 :(得分:1)

如果你把你在运行时得到的错误的性质放在一边会有所帮助。如果您提供导致此错误的输入示例,也会有所帮助。

一些观察结果,可能会给出一些错误原因的指示:

  • 你的向量是全局变量。如果将它们传递给函数并且不将它们存储在全局范围内会好得多。这样可以更好地跟踪访问和更改的位置,这将使您的代码更易于维护。
  • 两个向量都不会在函数开始时被清除,因此将通过后续调用继续构建。这可能是也可能不是你想做的事。
  • 如果您不键入小写字母或“@”,函数将提前终止。这看起来是故意的,但当然任何标点符号,大写字母,数字或空格都会导致提前终止。
  • 您始终从该功能返回0。如果函数未写入返回值,则应将其声明为void。

我也会删除你对内联和注册的使用,这些内容不太可能给你带来明显的速度提升。