2015-02-20 3 views
-1

Я довольно новичок в программировании на С, поэтому я решил, что попробую написать простую программу для напечатать два номера int. Я запрашиваю у пользователя оба номера, а затем просто печатаю как с помощью printfНежелательный выход - Распечатка двух номеров

Однако при запуске программы я получаю результат, который действительно странный.

Например ...

Enter first int: 5 
Enter second int: 3 
First int: 2130567168 
Second int: 2686756 

Мой код ниже ...

#include <stdio.h> 

int main() 
{ 
    int x, y; 

    printf("Enter first number: "); 
    scanf("%i", x); 

    printf("Enter second number: "); 
    scanf("%i", y); 

    printf("%i\n%i%\n",x,y); 

    return 0; 
} 
+0

Изменение 'зсапЕ ("% я", х),' на 'зсапЕ ("% я", &x);' Do. тот же, что и для второго сканирования. – haccks

+1

Возможный дубликат [c scanf question] (http://stackoverflow.com/questions/2062648/c-scanf-question) – Axalo

ответ

5

Это потому, что вы забыли & в scanf заявлении. Поэтому изменить его к этому:

scanf("%i", &y); 
scanf("%i", &x); 
      //^ See here 

Также у вас есть один % слишком много в вашем PRINTF заявлении. Поскольку % для format specifiers, так что если вы хотите, чтобы напечатать символ % вы должны написать его 2 раза:

printf("%i\n%i%\n",x,y); 
      //^ Is a format specifier so if you want to print the symbol, write it 2 times 

Примечание стороны:

При использовании спецификатора %i в вашем Scanf заявлении и вы вводите что-то вроде этого: 035 выход будет 29, потому что он будет интерпретироваться как восьмеричное число. Поэтому, если вы не хотите, чтобы вы могли изменить спецификатор на %d и 035, будет 35

+0

Что добавит '&' do? – Delfino

+0

@Delfini Итак, сканируйте его в адрес переменной – Rizier123

+0

А, я вижу. Так что наличие 'x' просто означает, что он добавляет любое число, которое я вводил к данным, уже находящимся на 'X'? – Delfino

2

Изменить код следующим образом.

scanf("%i", &y); 
scanf("%i", &x); 

При сохранении значения переменной вы должны указать адрес этой переменной. Если вы используете массивы, вам не нужно это делать. В инструкции printf используйте необходимые спецификаторы.

printf("%i\n%i\n",x,y); 
2

Вы забыли '&' в Scanf заявлении:

scanf("%i", &y); 
scanf("%i", &x); 
     //^ this 
Смежные вопросы