Почему вместо букв выводит разные символы? - C (СИ)
Формулировка задачи:
Почему вместо букв выводит разные символы?
char str[80];
printf("Input string: ");
gets(str);
printf("\nstroka:%s",str);
int words = 1;
int i = 0;
int j;
int k;
while(str[i] != '\0')
{
if(str[i] == ' ')
{
words++;
}
i++;
}
printf("\n\nWords = %d\n",words);
char slovo[words][5];
while(str[i]!='\0')
{
if(str[i]!=' ')
{
slovo[k][j]=str[i];
j++;
}
else
{k++;
i++;
}
}
for(k=0;k<words;k++)
{
for(j=0;j<5;j++)
printf("%6c",slovo[k][j]);
printf("\n");Решение задачи: «Почему вместо букв выводит разные символы?»
textual
Листинг программы
char slovo[words][10];
int j=0;
while(str[i]!='\0')
{
if(str[i]!=' ')
{
slovo[k][j]=str[i];
j++;
}
else
{k++;
i++;
}
j=0;
}
for(k=0;k<words;k++)
{
for(j=0;j<10;j++)
printf("%c",slovo[k][j]);
printf("\n");
}
Объяснение кода листинга программы
В этом коде:
- Объявляется массив
slovoтипаcharразмеромwords(предположительно число) на 10 символов каждый. - Инициализируется счётчик
jравным нулю. - В цикле
whileпроисходит чтение символов из строкиstr. - Если текущий символ не пробел, то он записывается в текущую строку массива
slovoи увеличивается счётчикj. - Если текущий символ - пробел, то увеличивается счётчик
k(который ищет следующую строку в массиве) и пропускается текущий символ. - После окончания цикла, счётчик
jсбрасывается в ноль. - В цикле
forдля каждого подмассиваslovoвыводятся все его элементы. - После каждой строки выводится символ новой строки
\n. Если вместо букв выводятся разные символы, это может быть связано с тем, что вводные данные (строкаstr) содержат символы, которые не являются буквами латинского алфавита или не включены в диапазон символов, допустимых для представления в типеchar.