为什么它循环前要先输入一次呀。

P1957 口算练习题

an_xi @ 2021-12-20 17:43:32

不加个输入,输入n时就会先完成一次不明所以的循环。

#include<iostream>
#include<cstdio>
#include<cstring>
#define maxn 20
using namespace std;
int main(){
    int n,a,b,c;
    char x[maxn],y[maxn],m;
    cin>>n;
    fgets(x,sizeof(x),stdin);
    while(n--){
        fgets(x,sizeof(x),stdin);
        if(x[0]=='a'||x[0]=='b'||x[0]=='c'){
            m=x[0];
            x[0]=' ';
        }
        sscanf(x,"%d %d",&a,&b);
        switch(m){
            case'a':c=a+b;
                    sprintf(y,"%d+%d=%d",a,b,c);
                    break;
            case'b':c=a-b;
                    sprintf(y,"%d-%d=%d",a,b,c);
                    break;
            case'c':c=a*b;
                    sprintf(y,"%d*%d=%d",a,b,c);
                    break;
        }
        printf("%s\n",y);
        printf("%d",strlen(y));
        if(n>=1)    printf("\n");
    }
    return 0;
}

by KellyFrog @ 2021-12-20 18:18:32

你可以理解为读完 n 之后读取的指针在 \n,所以会读个空串


by an_xi @ 2021-12-20 18:28:58

@longer_name 所以我在输入后加一个换行就能避免这种情况嘛?


by an_xi @ 2021-12-20 18:38:08

@longer_name 明白了,谢谢dalao。


|