Nano Hash - криптовалюты, майнинг, программирование

cin.getline() не работает при вызове во второй раз

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

  • 1. Используйте std::getline. 2. stackoverflow.com/search?q=%5Bc%2B%2B%5D% 20getline%20skipping 21.05.2013
  • Можете ли вы опубликовать результаты, которые вы получаете в настоящее время, и что вы ожидаете? (и ваш вклад) 21.05.2013
  • char numb[MAX];, за которым следует неотмеченный getline(cin,numb);, означает ожидающее переполнения буфера. Было бы лучше использовать std::strings. 21.05.2013

Ответы:


1

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

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

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

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

20.05.2013
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..