求助大佬,为什么输入n的时候n也会进入循环并且输出值?

P1957 口算练习题

zkmyyy @ 2022-12-16 07:36:26

WA代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n,a,b,c;
    char s[100],ans[100],last;
    scanf("%d",&n);
    while(n--)
    {
        fgets(s,sizeof(s),stdin);
        if(s[0]=='a'||s[0]=='b'||s[0]=='c')
        {
            last=s[0],s[0]=' ';
        }
        sscanf(s,"%d%d",&a,&b);
        switch(last)
        {
            case'a':c=a+b;sprintf(ans,"%d+%d=%d",a,b,c);break;
            case'b':c=a-b;sprintf(ans,"%d-%d=%d",a,b,c);break;
            case'c':c=a*b;sprintf(ans,"%d*%d=%d",a,b,c);break;
        }
        printf("%s\n%d\n",ans,strlen(ans));
    }
}

本蒟蒻瞎改之后AC了但是并不知道为什么这样改。

cin>>n;
    n=n+1;
    while(n--)
if(strlen(ans)!=0)
        {
            printf("%s\n%d\n",ans,strlen(ans));
        }

求助大佬!求助大佬!求助大佬!


by Eleveslaine @ 2022-12-16 08:03:37

@zkmyyy gets 不是寄了吗,fgets 还能用吗


by zkmyyy @ 2022-12-16 08:13:23

@Franz_Liszt 是的


by Eleveslaine @ 2022-12-16 08:17:34

@zkmyyy

  1. 建议用 cin.getline(s,101)因为我没用过fgets

  2. 输入完 n 后要 cin.getline or fgets 一次,因为有一个换行没读,即

    4 // 这一行末尾的换行
    a 64 46
    275 125
    c 11 99
    b 46 64

    这就是为什么输入 (n+1)+ 判空可以过。


|