Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> scanf не хочет принимать несколько параметров 
V
    Опции темы
CMM
Дата 9.2.2010, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 9.2.2010

Репутация: нет
Всего: нет



Доброе время суток, подскажите пожалуйста. Недавно взялся изучать С++, работаю в Visual Studio 2008, создаю консольное приложение. Списываю пример из учебника, задача проста: вводим начальное и конечное время и вычисляем разницу. Но вот беда, среда выдает сообщение об ошибке на функции printf. Не пойму в чем дело, с учебника точно списал, по логике тоже вроде все верно.
Вот пример кода:
Код
#include <stdio.h>

int main()
{
    short h1, m1, s1, h2, m2, s2, h, m, s;
    printf("Input h1, m1, s1: ");
    scanf("%i%i%i", &h1, &m1, &s1);
    printf("Input h2, m2, s2: ");
    scanf("%i%i%i", &h2, &m2, &s2);

    long sum_sec=(h2-h1)*3600+(m1-m2)*60+s2-s1;

    h=sum_sec/3600;
    m=(sum_sec-h*3600)/60;
    s=sum_sec-h*3600-min*60;

    printf(" Dlit prom ot %i:%i:%i do %i:%i:%i", h1, m1, s1, h2, m2, s2);
    printf(" ravn %i:%i:%i", h, m, s);
    return 0;
}



Модератор: не забываем пользоваться кнопочкой "Код".

Это сообщение отредактировал(а) bsa - 10.2.2010, 15:29
PM MAIL   Вверх
artsb
Дата 9.2.2010, 13:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 4
Всего: 64



Код

#include <stdio.h>

int main()
{
    short h1, m1, s1, h2, m2, s2, h, m, s;
    printf("Input h1, m1, s1: ");
    scanf("%hi%hi%hi", &h1, &m1, &s1);
    printf("Input h2, m2, s2: ");
    scanf("%hi%hi%hi", &h2, &m2, &s2);

    long sum_sec=(h2-h1)*3600+(m1-m2)*60+s2-s1;

    h=sum_sec/3600;
    m=(sum_sec-h*3600)/60;
    s=sum_sec-h*3600-m*60;

    printf(" Dlit prom ot %i:%i:%i do %i:%i:%i", h1, m1, s1, h2, m2, s2);
    printf(" ravn %i:%i:%i", h, m, s);

    return 0;
}

?

Добавлено @ 13:32
В догонку:
http://www.cplusplus.com/reference/clibrary/cstdio/scanf/

Это сообщение отредактировал(а) artsb - 9.2.2010, 14:18


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
Ozerich
Дата 9.2.2010, 13:33 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 164
Регистрация: 2.8.2009
Где: Минск, Беларусь

Репутация: 4
Всего: 5



В какой среде пишете код?
И ошибка должна быть там где необъявленная переменная используется.

з.ы Разделом ошиблись  smile 
--------------------
C++(STL) / DHTML(CSS) / Javascript / PHP  Developer
PM MAIL ICQ Skype   Вверх
EgorTheBlade
Дата 10.2.2010, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 141
Регистрация: 5.12.2009

Репутация: нет
Всего: -1



Код


  scanf("%i%i%i", &h2, &m2, &s2);
исп scanf("%d",&h2);


PM MAIL Skype   Вверх
bilbobagginz
Дата 10.2.2010, 14:55 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

Репутация: нет
Всего: 317



Цитата(CMM @  9.2.2010,  12:09 Найти цитируемый пост)
Но вот беда, среда выдает сообщение об ошибке на функции printf

что это за сообщение об ошибке?



--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
Luyan
Дата 10.2.2010, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 180
Регистрация: 3.12.2008

Репутация: 2
Всего: 7



Цитата(CMM @  9.2.2010,  13:09 Найти цитируемый пост)
#include <stdio.h>

Могу предположить, что в
Цитата(CMM @  9.2.2010,  13:09 Найти цитируемый пост)
Visual Studio 2008

правильней так:
Код

#include <cstdio>



Это сообщение отредактировал(а) Luyan - 10.2.2010, 15:18
PM   Вверх
bsa
Дата 10.2.2010, 15:33 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Народ, завязываем оффтопить. artsb, уже дал правильный ответ.

CMM, если вдруг ты не понял в чем дело, то расшифрую. Когда ты в качестве спецификатора указываешь %i, то scanf думает, что нужно положить данные в переменную типа int. А ты ему подсовываешь переменную типа short int, которая может быть меньшего размера. В итоге scanf портит память, что приводит к неожиданным последствиям.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0794 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.