2013-05-20 2 views
0

В этом коде getline не работает для i = 1. Но для i = 0 он работает полностью нормально. Что я должен делать, чтобы многократно работать с функцией getline. Этот код принимает число и проверяет его делимость. «Numb» берется для хранения номера. Для i = 0 все вычисления просто прекрасны, но когда он идет на второй поворот, не знаю, что происходит, но cin.getline не работает.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; 
} 
+1

1. Используйте 'std :: getline'. 2. http://stackoverflow.com/search?q=%5Bc%2B%2B%5D%20getline%20skipping – chris

+0

Можете ли вы опубликовать вывод, который вы в настоящее время получаете, и что вы ожидаете? (и ваши входы) –

+1

'char numb [MAX];', за которым следует непроверенная 'getline (cin, numb);' - переполнение буфера, которое должно произойти. Было бы лучше использовать 'std :: string'. –

ответ

1

Я думаю, что Ваш вклад может выглядеть

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

Первый раз Вы читали "что-то" с getline(). Затем ваш алгоритм читает 3 как numbers, а затем три числа, за которым следует этот. И здесь чтение останавливается. В следующий раз, когда вы вызываете getline(), он будет продолжать чтение до тех пор, пока не достигнет первого символа '\n'. Поэтому он не будет читать «что-то другое», когда вы этого захотите.

Теперь я не могу попробовать, но я думаю, что он будет работать нормально с дополнительным «немым» getline() после цикла, который заполняет массив div.

Смежные вопросы