Как правильно 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
�<�

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

Спасибо

Ответы

Ответ 1

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

char str[10];
int n;

printf("type a string: ");
scanf("%s %d", str, &n);

printf("%s\n", str);
printf("%d\n", n);

Проговорите изменения:

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

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

Ответ 2

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

Ответ 3

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

#include<stdio.h>
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;
}