Другие языки программирования и технологии

Почему программа не работает? помогите пожалуйста(Си)

Дана строка из не более чем 30 слов, в каждом слове не более 8 букв. Слова разделены запятой, за последним-точка. Вывести слова встречающиеся более одного раза( допусти если я ввожу : зщ,зщ,жд,зщ,жд,ор. То программа должна вывести зщ зд). Использовать двумерный массив #include <stdlib.h>#include <conio.h>#include<iostream>int main(){ char ch; int i,j, k, n, m, l, c, f; char str[30][8], b[15][8]; for(m=0; m<15; m++) {for (j=0;j<8;j++) /* для каждого i присвоить a = 0; */b[m][j]=0;}m=0; i=0; ch='\0'; while(ch!='.') {scanf("%c",&ch); j=0; while(ch!=','&&ch!='.') { str[j]=ch; scanf("%c",&ch); j++; } str[j]='\0'; i++; } i=n;for(i=0;i<n;i++)>[j]==str[k][j]&&f!='\0'&&f!=1;j++) { if(str[j]=='\0'&&str[k][j]=='\0') { for (l=0;l<=15&&f!=1;l++) { for(j=0;str[j]==b[l][j]&&f!=1;j++) if(str[j]=='\0') f=1;} if (l==15&&f==0) { for(j=0;str[j]!='\0';j++) b[m][j]=str[j]; m++; } } } } } for (m=0,j=0;m<=15&&b[m][j]!='0';m++) { for(j=0;b[m][j]!='\0';j++) printf("%c ", b[m][j]); } getch();}
Очень жуткая программа. Я понимаю, что давать нормальные имена переменным многие новички считают излишеством, а потом долго удивляются, откуда взялась логическая ошибка и как вообще такое получилось.

Ну а подобные куски кода:
while(ch!=','&&ch!='.')
{
str[j]=ch;
scanf("%c",&ch);
j++;
}

очень любят кулхацкеры, так как это готовый загрузчик вредоносного кода для срыва стека. В правильном коде всегда должна проверяться возможность переполнения целевого массива.
Вот это вообще супер: for(i=0;i<n;i++)>[j]==str[k][j]&&f!='\0'&&f!=1;j++) такой код и в ночном кошмаре не приснится. Да и вообще не понятно, как такое могло скомпилироваться (ИМХО там скобки не хватает) .

А это зачем?
for(j=0;b[m][j]!='\0';j++)
printf("%c ", b[m][j]);

Для вывода строк, завершающихся '\0' используется символ форматирования %s
Вот что нужно для распечатки массива b:
for( m = 0; m < 15; m++ )
{
printf( "%s\n", b[m] );
}

Я далеко не уверен, что нашел тут все ошибки, но к сожалению мылру никак не озаботится хотя бы сохранением форматирования исходников, а слипшийся код затрудняет понимание замысла авторов.
Петренко Александр
Петренко Александр
9 623
Лучший ответ
а почему она (программа) в данном виде вообще должна работать?
Вы её скопировали откуда-то? Тут словно кусок программы выкинули.. .
Никакого баланса скобок.. .

что означает эта строка?

for ( i = 0; i < n; i++ ) > [j] == str[k][j] && f != '\0' && f != 1; j++ )
97 421