为什么循环在单次执行后才会终止?

时间:2016-05-21 10:13:26

标签: c++

#include<iostream>
#include<string.h>
using namespace std;
int main()
{
    int n;
    cin>>n;
    int x=0;
    while(n--)
    {
        char s[3];
        cin>>s;
        if(strcmp(s,"X++")==0||strcmp(s,"++X")==0)
        x+=1;
        else
        x-=1;
    }
    cout<<x;
}

当我删除if语句中的strcmp行时,循环工作正常。

1 个答案:

答案 0 :(得分:0)

如πάνταῥεῖ所述, s 的大小必须为4才能存储'\ 0'字符。否则:

#include<iostream>
#include<string>
using namespace std;

int main()
{
    int n;
    cin >> n;
    int x = 0;

    while(n--)
    {
        string s;
        cin >> s;
        if(s == "X++" || s == "++X")
            x+=1;
        else
            x-=1;
    }
    cout << x;
    return 0;
}

会将您的字符串存储在 s 中,并将'\ 0'放在 s 的范围之外。

当程序第二次进入循环时,你将无法编写它,因为每次都会得到“”(空字符串)。
要解决此问题,只需将 3 替换为 4 即可。

注意:如果你真的想使用C ++,我建议你使用std :: string。

body            {
            width: 900px;
            margin: auto;
            max-width: 900px;
            min-width: 300px;
            background-attachment: fixed;
            background-size: cover;
            background-image: url(images/seagull-sunset2.jpg);
            }

#banner img     {
            width: 100%;
            height: 200px;
            max-width: 100%;
            box-shadow: 2.5px 2.5px 5px 2.5px rgba(240,168,48,0.5);
            }