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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ввод переменной, BC 3.1 
:(
    Опции темы
InfMag
Дата 28.2.2005, 19:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



***


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

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



Как мне ввести переменную? То-бишь как в паскале: read(i);?
PM   Вверх
chipset
Дата 28.2.2005, 19:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

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



Это есть в любой книжке по Си.
Код

int i;
scanf("%d",&i);//Передаем значение указателем, иначе функция не сможет изменить его
printf("%d",i);//Вуаля! тут не надо указатель, функции не надо изменять переменную




--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
InfMag
Дата 28.2.2005, 19:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



***


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

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



А зачем перед i там стоит &?
Добавлено @ 19:38
А еще вопрос:
Если я ввести две переменные и сложить их? Потом соответственно вывести результат...
Добавлено @ 19:40
И еще в делфи есть прикол, типа ввод или вывод с новой строки. Мол префикс ln или как там его называют.
Как мне писать в BC?
Добавлено @ 19:43
И вот кстати у меня код:
Код

#include <c:\bc\inc\iostream.h>
#include "c:\bc\inc\conio.h"
#include "c:\bc\inc\stdio.h"
int sum(int a, int b) {
   return a+b;
}
void main() {
    clrscr();
    cout<<sum(3,5)); // !!!!!!!! Как мне cout также как здесь использовать на scanf()? !!!!!!!!
    cout<<"\n";
    int i;
    scanf("%d",&i);
    printf("%d",i);
    getch();
}

PM   Вверх
chipset
Дата 28.2.2005, 19:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

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



Цитата(InfMag @ 28.2.2005, 08:37)
А зачем перед i там стоит &?


Цитата(InfMag @ 28.2.2005, 08:37)
А зачем перед i там стоит &?

Это оператор взятия указателя.
Цитата(InfMag @ 28.2.2005, 08:37)
Если я ввести две переменные и сложить их? Потом соответственно вывести результат...

Кто тебе мешает? smile
Код

int a,b;
scanf("%d %d",&a,&b);
printf("%d",a+b);


Цитата(InfMag @ 28.2.2005, 08:37)
И еще в делфи есть прикол, типа ввод или вывод с новой строки. Мол префикс ln или как там его называют.
Как мне писать в BC?

'\n'
К примеру:
printf("Hello world!\n Second line \n Third line);


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
InfMag
Дата 28.2.2005, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



***


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

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



chipset
Спасиб.
Цитата

'\n'
К примеру:
printf("Hello world!\n Second line \n Third line);

Я не об этом. Если мне нужно запретить вводить числа в одну строку, а разрешить через Enter.
Добавлено @ 19:56
Люди, а как мне проверить является ли переменная числовой. И как проверить является ли она текстовой?
PM   Вверх
_hunter
Дата 28.2.2005, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



получай массив символов и смотри есть в нем что-то кроме цифр или нету


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
InfMag
Дата 28.2.2005, 20:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



***


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

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



_hunter
Ну а смотреть-то как?
PM   Вверх
_hunter
Дата 28.2.2005, 20:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



пробегаеш по всему массиву и смотриш чтобы символ был >= '0' и '9' <=


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
InfMag
Дата 28.2.2005, 20:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



***


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

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



_hunter
Можно пример кода? Че-то я не вьехал. Мне это циклом что-ль делать нада?
PM   Вверх
_hunter
Дата 28.2.2005, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



в цикле.
примерно так:
Код

for ( int i = 0; i < 10; i++ )
   if ( !( (buffer[i] >= '0') && (buffer[i] < '9') ) )
       //не цифра



--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
InfMag
Дата 28.2.2005, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



***


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

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



Мдя уж, я уже попробовал так
if (a>=0 && b>=0) {
bla bla bla
} else {
bla bla bla
}
Здесь что-то неправильно?
Добавлено @ 21:03
Я уже нашел недостаток!
Если я ввожу через Enter, а не через одну строку и если первая переменная - число, а вторая все, что угодно, кроме числа, то не реагирует и пытается сложить...
PM   Вверх
_hunter
Дата 28.2.2005, 21:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



Цитата
Здесь что-то неправильно?

а что должно получится? ;)
+ что такое а и б


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
InfMag
Дата 28.2.2005, 22:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



***


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

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



_hunter
Всмысле? Я не понял...
Яж написал:
Цитата

Я уже нашел недостаток!
Если я ввожу через Enter, а не через одну строку и если первая переменная - число, а вторая все, что угодно, кроме числа, то не реагирует и пытается сложить...

PM   Вверх
Goryachev
Дата 28.2.2005, 22:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 23.2.2005
Где: Израиль

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



InfMag
Короче так.
Функция scanf возвращает число правильных прочитанных данных.
Если к примеру такой код:
Код

 int num,res;
 res=scanf("%d",&num);


Примечания: <enter> - это кнопка "ENTER"
<space> - это кнопка пробел
Если ввод будет например: 10<enter>
то res=1, потому, что 10 это легальный ввод для целого числа. (Мы пытались прочесть integer - "%d")

Если ввод будет например: 10h<enter>
то res=0, потому, что 10h это не целое число.

И еще советую перед каждым вызовом scanf написать следующее:
Код

 fflush(stdin);


Это чистит буфер клавы. Для чего это нужно? А вот для этого.
К примеру есть такой код:
Код

 int num1,num2,res1,res2;
 printf("Enter first number: ");
 res1=scanf("%d",&num1);
 printf("Enter second number: ");
 res2=scanf("%d",&num2);


Если ввод к примеру такой: 10<space>h<enter>
То num1=10, res1=1, второй scanf не будет ждать ввода, а возьмет 'h' из буфера клавиатуры (для scanf пробел считается как enter) и поэтому res2=0, num2=неизвестно.

Поэтому, правильнее будет написать так, и проверять res на правильность ввода.
Код

int main()
{
 int num1,num2,res;
 printf("Enter first number: ");
 fflush(stdin);
 res=scanf("%d",&num1);
 if (!res)
 {
    printf("Illegal input...\n");
    return 1;
 }
 printf("Enter second number: ");
 fflush(stdin);
 res=scanf("%d",&num2);
 if (!res)
 {
    printf("Illegal input...\n");
    return 1;
 }
 printf("The sum %d + %d = %d\n",num1,num2,num1+num2);
 return 0;
}


PM MAIL   Вверх
_hunter
Дата 28.2.2005, 23:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



InfMag, то, что ты писал я читал, но приведенный код абсолютно не соответствует описанной задаче, потому я и переспросил


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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