Цикл 'while' не останавливается даже командой if (* str == 'stop') и вводом stop - PullRequest
0 голосов
/ 30 сентября 2019

Я хочу написать функцию, которая заменяет все вхождения символа c символом e. Функции вроде бы работают. Однако в основном я хочу иметь возможность многократно вводить строку, сканировать заменяемый символ, сканировать заменяющий символ и печатать до и после, ДО введенной строки «стоп». Как мне это сделать? Я попытался определить «стоп» как постоянную символьную строку, но это не сработало. Вот как выглядит мой код:

#include <stdio.h>
#include <string.h>

void replaceAll(char *str, char c, char e){
     for(int i = 0; str[i] != '\n'; i++){
        if(str[i] == c){
        str[i] = e;
        }
     }
     return; 
}

int main(){
    char str[80], c, e;
    //repeatedly enter string;
    while(*str != '\n'){
        fgets(str, sizeof(str), stdin);
        //jump out of loop
        if(*str == 'stop')
        getchar();
        scanf("%c", &c);
        getchar();
        scanf("%c", &e); 

        printf("replace all occurances of %c with %c in\n", c, e);
        printf("%s", str);
        //calls function
        replaceAll(str, c, e);
        printf("%s", str);
    }
    return 0; 
}

Любая помощь очень ценится:)

1 Ответ

2 голосов
/ 30 сентября 2019

Я предполагаю, что вы хотите, чтобы пользователь определил c и e один раз до запуска цикла. Затем переместите следующий код в любое место до начала цикла , в то время как цикл начинается. Лучше всего, если вы сообщите пользователю, что вводить, а не просто использовать scanf () .

    printf(“please enter the char to find\n”);
    getchar();
    scanf("%c", &c);
    printf(“please enter the char to replace\n”);
    getchar();

    scanf("%c", &e); 

Основная проблема заключается в следующей строке:

// jump out of loop
if(*str == 'stop')

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

Во-вторых, используйте strcmp ().

Третий, чтобы выпрыгнуть из цикла, используйте break; .

// jump out of loop
if(strcmp (&str[0], “stop\n”) == 0)
{
      break;
}
...