Не работает простенькая программа - C (СИ)
Формулировка задачи:
Привет всем.
Я изучаю язык С и сделал вот такую программку(сразу скажу что она запускается и выкидывает):
Я её отредактировал до тех пор пока она не начнет запускаться. Она запускается и сразу выкидывает меня оттуда. Суть программы такова что она должна оставить в первой строке только те элементы, которые не встречаются во второй строке.Прогонял пошагово через F8 так оно доходит до функции и сразу выкидывает как в неё зашло.
Пол дня уже мучаюсь над прогой этой. Оно конечно полезно помучаться когда учишь язык. но уже просто не пойму что можно попробовать чтоб заработало.
Может кто-то увидит ошибку. Заранее спасибо.
#include<stdio.h>
#include<conio.h>
#include<string.h>
void udal(char s[],char st[]);
void main()
{
char s[]="abcd";
char st[]="bc";
udal(s,st); // из s удаляются все элементы которые имеются в st
printf("%s",s);
getch();
}
void udal(char s[],char st[])
{
char res[]="",prom[1];
int i,j,n;
n=strlen(s);
for(i=strlen(st);i>=0;i--){
for( j=0;j<n;j++)
if(st[i]!=s[j]) {
prom[1]=s[j];
strcat(res,prom);
}
strcpy(s,res);
n=strlen(s);
strcpy(res,"");
}
}Решение задачи: «Не работает простенькая программа»
textual
Листинг программы
#include<stdio.h>
#include<conio.h>
#include<string.h>
void udal(char s[],char st[]);
int main()
{
char s[]="abcd";
char st[]="bc";
udal(s,st); // из s удаляются все элементы которые имеются в st
printf("%s",s);
getch();
return 0;
}
void udal(char s[],char st[])
{
char res[256]="",prom[2];
prom[1]='\0';
int i,j,n;
n=strlen(s);
for(i=strlen(st);i>=0;i--){
for( j=0;j<n;j++)
if(st[i]!=s[j]) {
prom[0]=s[j];
strcat(res,prom);
}
strcpy(s,res);
n=strlen(s);
strcpy(res,"");
}
}
Объяснение кода листинга программы
- Включаются необходимые заголовочные файлы: stdio.h, conio.h, string.h
- Определяется функция udal с двумя аргументами типа char.
- В функции main создаются две строки s и st, и вызывается функция udal.
- В функции udal создаются три дополнительные переменные: res, prom, n.
- В prom инициализируется пустая строка, а в n записывается длина строки s.
- Происходит два вложенных цикла: внешний - перебирает символы строки st, внутренний - перебирает символы строки s.
- Если текущий символ строки s соответствует текущему символу строки st, то он добавляется в конец строки res.
- После завершения циклов, содержимое строки s заменяется на содержимое строки res.
- Функция main завершается возвратом значения 0, что означает успешное выполнение программы.
- Программа выводит на экран содержимое строки s.
- В функции main вызывается функция getch для приостановки выполнения программы до нажатия клавиши.
- В функции udal после завершения циклов, переменная n обнуляется, и строка res инициализируется пустой строкой.