Я промежуточный программист на Python, но я пытаюсь научиться C. Это очень неприятный опыт.Почему printf производит странный вывод в моем простом скрипте?
Почему этот простой код ...
#include <stdio.h>
#include <string.h>
char name[15] = "George Lopez"; /* string representing your name */
char birthday[6] = "01-30-92"; /* string representing your bday */
int phone_number; /* declair int representing phone number */
int main() {
phone_number = 2222223333; /* int representing your phone number */
printf("You said your name was: %s\n", name);
printf("And your birthday is %s?\n", birthday);
printf("And, so I can call you, your number is %d\n", phone_number);
return(0); /* exit program normally */
}
производить этот вывод, когда телефонный номер 2222223333:
You said your name was: George Lopez
And your birthday is 01-30-92?
And, so I can call you, your number is -2072743963
Этот выход, когда телефонный номер 9992223333:
error: 4_1_myinfo.c:16:3: warning: overflow in implicit constant conversion [-Woverflow]
phonenumber = 9992223333;
И этот выход, если номер телефона 1112223333:
You said your name was: George Lopez
And your birthday is 01-30-92?
And, so I can call you, your number is 1112223333
Я подозреваю, что это связано с тем, как C имеет дело с целыми числами. Возможно, ints в C имеют меньшую максимальную длину, чем ints в python, и это приводит к wanky output?
Вне границ массива: 'char birthday [6] =" 01-30-92 ";', вызывая неопределенное поведение. – hmjd
'birthday' должен вызывать обязательную диагностику при компиляции. Если вы (можете и делаете) игнорируете это, это не допустимая строка, поэтому передача его в 'printf' в качестве строки - UB. – Deduplicator
Несмотря на свое представление в виде строки цифр, номер телефона не * действительно * номер. Также используйте строку. – chepner