#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);
формате?