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