0

このコードでは、getline は i =1 では機能しませんが、i = 0 では完全に正常に機能しています。getline関数を繰り返し使用するにはどうすればよいですか.このコードは数値を取り、その割り切れる可能性をチェックします.「numb」は数値を格納するために使用されます.i = 0の場合、すべての計算は問題ありませんが、2ターン目に進むと、どうなるかわかりませんが、cin.getline が機能しません。

#include <iostream>
#include <cstring>
#include <iomanip>
#include <cstdio>
#include <cstdlib>
#define MAX 1050 
using namespace std ;

int call_div (char *num ,long div)
{
    int len =strlen (num) ;
    int now ;
    long extra ;
    for (now = 0,extra=0; now < len; now += 1)
    {
        extra = extra *10 + (num [now] -'0') ;
        extra = extra %div ;
    }
    return extra ;
}

int main (int argc, char const* argv[])
{       
    int testcase,numbers ,flag =0;
    char numb[MAX] ;
    cin >> testcase ;
    getchar() ;


    for (int i = 0; i < testcase; i += 1)
    {
        cout << i << endl ;

        int div[14] ; 
        cin.getline(numb) ; // i= 0 ,it works fine ,i=1 ,it doesn't work
        cin >> numbers ;

        for (int j = 0; j < numbers; j += 1)
        {
            cin >> div[j] ;
        }
        for (int k = 0; k < numbers; k += 1)
        {

            //   cout << div[k]<< ' '   << call_div (numb,div[k]) << endl ;
            if (call_div (numb,div[k])==0)
            {
                flag = 1 ;
            }
            else {
                flag = 0 ;
                break;
            } 
        }
        if (flag==0 )
        {
            cout << "simple"<< endl  ;
        }
        else
            cout << "wonderful" << endl  ;

    }       
    return 0;
} 
4

1 に答える 1

1

あなたの入力は次のようになると思います

something
3 1 2 3
some other thing
4 1 2 3 4

初めて で「何か」を読みますgetline()。次に、アルゴリズムは 3 を として読み取り、numbers次に 3 つの数値の後にその数値が続きます。そして、ここで読書が止まります。次に を呼び出すと、最初の文字getline()に到達するまで読み続けます。'\n'そのため、必要なときに「他のもの」と読みません。

今は試すことはできませんが、配列getline()を埋めるループの後に余分な「ダム」を追加するとうまくいくと思います。div

于 2013-05-20T21:56:36.340 に答える