Как правильно printf целое число и строка в c?

У меня есть следующий код:

char *s1, *s2; char str[10]; printf("type a string: "); scanf("%s", str); s1 = &str[0]; s2 = &str[2]; printf("%s\n", s1); printf("%s\n", s2); 

Когда я запустил код и введите ввод «A 1» следующим образом:

 type a string: A 1 

Я получил следующий результат:

 A  <  

Я пытаюсь прочитать первый символ как строку и третий символ как целое число, а затем распечатать их на экране. Первый символ всегда работает, но после этого экран будет отображать случайные вещи … Как мне его исправить?

Спасибо

Ты на правильном пути. Вот исправленная версия:

 char str[10]; int n; printf("type a string: "); scanf("%s %d", str, &n); printf("%s\n", str); printf("%d\n", n); 

Давайте поговорим об изменениях:

  1. выделите int ( n ), чтобы сохранить ваш номер в
  2. скажите scanf чтобы сначала прочитать строку, а затем число ( %d означает число, как вы уже знали из вашего printf

Это почти все, что нужно. Ваш код немного опасен, потому что любой пользовательский ввод длиной более 9 символов переполнит str и начнет топтать ваш стек.

scanf("%s",str) сканирует только до тех пор, пока не найдет пробельный символ. При вводе "A 1" он будет сканировать только первый символ, следовательно, s2 указывает на мусор, который оказался на str , поскольку этот массив не был инициализирован.

Попробуйте этот код, мой друг …

 #include int main(){ char *s1, *s2; char str[10]; printf("type a string: "); scanf("%s", str); s1 = &str[0]; s2 = &str[2]; printf("%c\n", *s1); //use %c instead of %s and *s1 which is the content of position 1 printf("%c\n", *s2); //use %c instead of %s and *s3 which is the content of position 1 return 0; }