Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Ввод переменной


Автор: InfMag 28.2.2005, 19:21
Как мне ввести переменную? То-бишь как в паскале: read(i);?

Автор: chipset 28.2.2005, 19:32
Это есть в любой книжке по Си.
Код

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


Автор: InfMag 28.2.2005, 19:37
А зачем перед 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();
}

Автор: chipset 28.2.2005, 19:46
Цитата(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);

Автор: InfMag 28.2.2005, 19:49
chipset
Спасиб.
Цитата

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

Я не об этом. Если мне нужно запретить вводить числа в одну строку, а разрешить через Enter.
Добавлено @ 19:56
Люди, а как мне проверить является ли переменная числовой. И как проверить является ли она текстовой?

Автор: _hunter 28.2.2005, 20:15
получай массив символов и смотри есть в нем что-то кроме цифр или нету

Автор: InfMag 28.2.2005, 20:31
_hunter
Ну а смотреть-то как?

Автор: _hunter 28.2.2005, 20:34
пробегаеш по всему массиву и смотриш чтобы символ был >= '0' и '9' <=

Автор: InfMag 28.2.2005, 20:54
_hunter
Можно пример кода? Че-то я не вьехал. Мне это циклом что-ль делать нада?

Автор: _hunter 28.2.2005, 20:58
в цикле.
примерно так:
Код

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

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

Автор: _hunter 28.2.2005, 21:13
Цитата
Здесь что-то неправильно?

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

Автор: InfMag 28.2.2005, 22:15
_hunter
Всмысле? Я не понял...
Яж написал:
Цитата

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

Автор: Goryachev 28.2.2005, 22:48
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;
}


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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)