2009-05-14 3 views
9

Я хочу обработать пользовательский ввод как целое число, но кажется, что C не имеет возможности получить int из stdin. Есть ли функция для этого? Как мне узнать, как получить int от пользователя?Что такое самый простой способ получить int в консольном приложении?

ответ

-1
#include <stdio.h> 

main() { 

    int i = 0; 
    int k,j=10; 

    i=scanf("%d%d%d",&j,&k,&i); 
    printf("total values inputted %d\n",i); 
    printf("The input values %d %d\n",j,k); 

} 

от here

+6

Это выглядит очень подозрительно, он одновременно сохраняет результат scanf() в i и одновременно считывает значение в i. Не рекомендуется. – unwind

1

стандартной функции библиотеки зсапЕ используется для форматированного ввода: % d Int (Д короток для десятичной)

#include <stdio.h> 
int main(void) 
{ 
    int number; 
    printf("Enter a number from 1 to 1000: "); 

    scanf("%d",&number); 
    printf("Your number is %d\n",number); 
    return 0; 
} 
+0

Я добавил числовую переменную. –

+0

lol thanks – TStamper

5

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

int num, nitems; 

nitems = scanf("%d", &num); 
if (nitems == EOF) { 
    /* Handle EOF/Failure */ 
} else if (nitems == 0) { 
    /* Handle no match */ 
} else { 
    printf("Got %d\n", num); 
} 
+0

Номер шахты иногда идет на отрицательный или случайный, почему это? Это, если мое целое большое, все еще в пределах 32 символов, но все еще большое –

+0

Целое число обычно составляет 2 байта. Самый левый бит используется для хранения знака числа (0 для положительного, 1 для отрицательного), поэтому у нас осталось 15 бит для хранения самого номера. Из-за этого целые числа в C могут варьироваться от -32768 (-2^15 или 1111111111111111) до 32768 (2^15 или 0111111111111111). Когда вы вводите число, большее, чем наибольшее возможное значение, крайнему левому бит присваивается значение, а целое число больше не представляет собой значение, на которое вы надеялись. Если вы хотите ввести большие целые числа, используйте 'long int' или даже long long int, так как он может содержать гораздо большие числа. – PoVa

1

Помимо (f)scanf, которая была достаточно обсуждаемым другими ответами , есть также atoi и strtol, для случаев, когда вы уже прочитали ввод в строку, но хотите преобразовать его в int или long.

char *line; 
scanf("%s", line); 

int i = atoi(line); /* Array of chars TO Integer */ 

long l = strtol(line, NULL, 10); /* STRing (base 10) TO Long */ 
            /* base can be between 2 and 36 inclusive */ 

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

char *strs[] = {"not a number", "10 and stuff", "42"}; 
int i; 
for (i = 0; i < sizeof(strs)/sizeof(*strs); i++) { 
    char *end; 
    long l = strtol(strs[i], &end, 10); 
    if (end == line) 
     printf("wasn't a number\n"); 
    else if (end[0] != '\0') 
     printf("trailing characters after number %l: %s\n", l, end); 
    else 
     printf("happy, exact parse of %l\n", l); 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^