Как я могу разрезать каждый алфавит на C

#c

Вопрос:

Предполагая, что входные строки являются

 hi, user id 5!
 

Я пытаюсь сохранить их в массиве, таком как

 {'h','i',',','u','s','e','r'...}
 

Поскольку в массиве не должно быть пробелов, я использовал strtok. Ниже приведен мой код

 scanf("%[^n]s",input);

char *temp = strtok(input, " ");
char array[50] = {};
int counter = 0;

while(temp != NULL)
{
    printf("%s", temp);
    array[counter] = *temp;
    temp = strtok(NULL, " ");
    counter  = 1;
}

for(int i = 0; i < counter; i  )
{
    printf("%sn", amp;array[i]);
}
 

Таким образом, я обнаружил, что мой код работает, но отличается от того, что я ожидал. Результаты были

 hi, user id 5!
i, user id 5!
, user id 5!
 user id 5!
user id 5!
ser id 5!
(and continues until)
5!
!
 

Другими словами, данные массива сохраняются в виде

 {'hi, user id 5!','i, user id 5!',', user id 5!', .... , '5!', '!'}
 

Я не уверен в происхождении проблемы. Вместо того, чтобы использовать strtok, мне нужно найти другой способ?

Комментарии:

1. Я не думаю, что это вообще было бы результатом программы. Ты уверен, что это так? Пожалуйста, предоставьте точные выходные данные для данного ввода. Но для начала printf("%sn", amp;array[i]); это неверно, если вы пытаетесь напечатать каждый символ в массиве. Должно быть printf("%cn", array[i]);

2. @kaylum Я обновил свой код, как вы сказали, и это сработало. Есть ли какая-либо документация, на которую я могу сослаться относительно разницы между («%sn», amp;массив[i]) и («%cn», массив[i])?

3. руководство по печати. Но я все еще не думаю, что ваш код верен, как показано на рисунке. В нем будет храниться только первая буква каждого слова array . Поэтому я не понимаю, почему вы говорите, что это правильно. Если только ваш код не отличается от того, что показано на рисунке. Смотрите здесь , с помощью какого кода %c вы используете .

4. Что ты пытаешься получить? Я не могу понять.

5. Юнджевон, Кто или какой текст предложил s в этом scanf("%[^n]s",input); формате?