Member 12843700 Ответов: 2

Пожалуйста, сообщите об изменениях в программе, чтобы получить желаемый результат


#include<stdio.h>
void main()
    {
    char str[30],*cp,ch;
    printf("enter a string");
    scanf("%s",str);
    char *str1="india";              /*take str as "ilovemyindia"*/
    cp=NULL;
    ch=*str1;
    cp=match(ch,str);
    if(*cp==ch)
        {
        printf("\n");
        while(*cp!='\0')
            cp++;
        printf("%c",*cp);
        }
    else 
        printf("no match found");
    printf("\n");
    }
char*match(char c,char*s)
    {
    while(c!=*s)
        s++;
    return (s);
    }


[edit]добавлен отступ-OriginalGriff [/edit]

Что я уже пробовал:

он показывает 0 ошибок, но не показывает желаемый результат, то есть совпадение найдено или нет, он просто просит ввести массив, а затем пробел

Member 12843700

сэр я только недавно так что я не получаю вещи легко tht вот почему я прошу решение так что пожалуйста предоставьте его

2 Ответов

Рейтинг:
0

OriginalGriff

Начните с отступа вашего кода: это значительно облегчит его чтение.
И пока вы учитесь, по крайней мере, никогда не пишите ни одной строки в виде цикла или условия - всегда используйте фигурные скобки. Это может показаться большой работой, но это делает thigns намного более очевидным, когда вы меняете его или получаете проблему.
Так что меняйся

while(*cp!='\0')
   cp++;

К
while(*cp!='\0')
   {
   cp++;
   }
И так далее. Поверь мне, оно того стоит!
Затем посмотрите на свой код - и это было бы действительно очевидно, если бы вы запустили его через отладчик, - и совершенно ясно, что здесь есть проблемы.
Вы заметили, что начинаете с первого символа вашей строки:
ch=*str1;
А затем проверьте, есть ли он в строке:
cp=match(ch,str);
Так оно и есть, потому что вы только что получили его оттуда. Тогда вы дважды проверьте это:
if(*cp==ch)
что всегда будет правдой!

Но чего вы еще не заметили, так это того, что ваш метод соответствия действительно отвратителен:
char*match(char c,char*s)
    {
    while(c!=*s)
        s++;
    return (s);
    }
Что произойдет, если строка не содержит символа?

И не только это, но:
while(*cp!='\0')
    cp++;
printf("%c",*cp);
И ничего не собирается печатать. Никогда!

Разбейте отладчик и начните шагать через свой код: это навык, который вам нужно освоить, и его лучше всего изучать на простых примерах кода, подобных этому.


Member 12843700

пожалуйста, опубликуйте код corerect

OriginalGriff

Нет! Это ваша домашняя работа, и ее исправление-часть задачи. Если бы я просто дал вам полное решение, то на следующей неделе домашнее задание вам было бы еще труднее сделать.
Так что приготовьтесь к отладчику и начните смотреть, что не так.
Все, что вам нужно сделать, это подумать о том, что вы пытаетесь сделать, и сравнить это с тем, что происходит на самом деле.

Member 12843700

сэр я недавно заявил так что я не получаю вещи легко вот почему я прошу решения

OriginalGriff

Не просите решения - исправьте то, что у вас есть.
Если вы не исправите это сами, то вы не узнаете часть задачи: как найти проблемы и исправить их! И поверьте мне, сделать это на таком тривиальном фрагменте кода, как этот, намного проще, чем пытаться сделать это на следующей неделе с более крупной задачей, или на следующей неделе с гораздо более крупной задачей, или ...
Вы получаете картину.
Начните смотреть на код, используйте отладчик и подумайте о том, что я вам сказал.
Вы можете сделать это - но только если вы приложите к этому свой ум, а не будете пытаться заставить других сделать это за вас.

Рейтинг:
0

Patrice T

Цитата:
Пожалуйста, сообщите об изменениях в программе, чтобы получить желаемый результат
Вы только забыли сказать нам, что такое фактический результат и что такое желаемый результат, а также не сказали нам, в чем проблема или цель.
Задавать вопросы-это навык[^]
----------
while(c!=*s)
    s++;

Я думаю, вы забыли проверить конец строки. Я предполагаю, что он всегда находит совпадение где-то за пределами ваших переменных.
----------
Вы должны научиться использовать отладчик как можно скорее. Вместо того чтобы гадать, что делает ваш код, пришло время увидеть, как он выполняется, и убедиться, что он делает то, что вы ожидаете.

Отладчик позволяет вам следить за выполнением строка за строкой, проверять переменные, и вы увидите, что есть точка, в которой он перестает делать то, что вы ожидаете.
Отладчик-Википедия, свободная энциклопедия[^]
Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]

Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
Когда код не делает того, что ожидается, вы близки к ошибке.