Хобрук: Ваш путь к мастерству в программировании

Как правильно обрабатывать scanf()

Я должен ввести данные в следующем формате

S1 S2 S3

где S1 - символ, а S2, S3 - целые числа, например

 3
 A 123 452
 D 450 53
 B 330 672

(где «3» представляет количество запросов) Теперь я написал для него следующий код:

 while(i<=Q){
          scanf("%c %d %d",&ch,&index,&num);
          printf("%c %d %d\n",ch,index,num);
          i++;
 }

Однако для показанных выше трех значений я получаю следующий вывод

 0 755130840
A 123 452

 123 452        

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

Где я ошибаюсь?? Я даже пытался сканировать 3 значения по отдельности и очищать входной поток перед каждым оператором сканирования. Однако это тоже не помогает.

Учитывая две пустые строки, я полагаю, что новая строка ('\n') хранится в какой-то переменной. Как мне с этим справиться?

07.12.2013

  • Подсказка: используйте возвращаемое значение. (да: scanf() имеет возвращаемое значение!) 07.12.2013
  • поставить пробел перед %c в scanf 07.12.2013
  • Как это сработало?? Да, я имею в виду, что это должно было быть... но не могли бы вы немного уточнить? (вероятно, как ответ, за который я могу проголосовать...:)) 07.12.2013
  • @alphacentauri выберите правильный ответ. 07.12.2013

Ответы:


1

Добавьте пробел перед %c в scanf. Это позволит scanf пропустить любое количество пробелов перед чтением ch. scanf с пробелом пропускает пробелы (включая новые строки) и читает следующий символ, который не является пробелом.

Вот код, это будет работать нормально.

#include <stdio.h>

int main(void) {
    // your code goes here
    int i =0;
    int Q = 2;
    char ch;
    int index;
    int num;
    while(i<=Q){
          scanf(" %c %d %d",&ch,&index,&num);
          printf("%c %d %d\n",ch,index,num);
          i++;
 }

    return 0;
}
07.12.2013
  • -1, выложи сюда код. Не отвечайте только внешней ссылкой. 07.12.2013

  • 2

    Вы хотите что-то вроде этого?

    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
    
            int num, count, numone, numtwo;
            char charip;
            printf("Enter numbr of elem:\t");
            scanf("%d", &num);
            if (num < 0)
            {
                    printf("Enter positive value!!!!!\n");
                    exit (-1);
            }
            count = 0;
            while (count < num)
            {
                    getchar();
                    scanf ("%c %d %d", &charip, &numone, &numtwo)   ;
                    printf("%c %d %d\n", charip, numone, numtwo);
                    count++;
            }
    
            return 0;
    }
    
    07.12.2013
  • добавьте count++, иначе он попадет в бесконечный цикл 07.12.2013
  • Вы пробовали это... как вы могли забыть увеличить счетчик? 07.12.2013
  • Извини, я виноват. Спасибо за комментарии. 07.12.2013
  • Новые материалы

    Решения DBA Metrix
    DBA Metrix Solutions предоставляет удаленного администратора базы данных (DBA), который несет ответственность за внедрение, обслуживание, настройку, восстановление базы данных, а также другие..

    Начало работы с Блум
    Обзор и Codelab для генерации текста с помощью Bloom Оглавление Что такое Блум? Некоторые предостережения Настройка среды Скачивание предварительно обученного токенизатора и модели..

    Создание кнопочного меню с использованием HTML, CSS и JavaScript
    Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

    Внедрите OAuth в свои веб-приложения для повышения безопасности
    OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

    Классы в JavaScript
    class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

    Как свинг-трейдеры могут использовать ИИ для больших выигрышей
    По мере того как все больше и больше профессиональных трейдеров и активных розничных трейдеров узнают о возможностях, которые предоставляет искусственный интеллект и машинное обучение для улучшения..

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