0

このコードで、ユーザーに再度プロンプトを表示せずに無限ループを実行するのはなぜですか

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

void to_rot13(char* value);

int main(){
    char word[1024];
    printf("C ROT13\nSome data to code or decode\n");
    while (1){
        printf(": ");
        scanf("%[^\n]s", word);
        to_rot13(&word);
        printf(": %s\n", word);
    }
    return 0;
}


void to_rot13(char* value){
    unsigned int x;
    for (x = 0; value[x] != '\0'; x++){
        if ((value[x] < 'A') || (value[x] > 'Z' && value[x] < 'a') || (value[x] > 'z')){}
        else if (tolower(value[x]) <= 'm'){value[x] = value[x] + 13;}
        else{value[x] = value[x] - 13;}
    }
}

これ以上正確にできないユーザーにもう一度プロンプトを表示したいと思います。

4

2 に答える 2

3
scanf("%[^\n]s", word);

改行を入力バッファに残します。バッファに残っscanfている最初の行は改行であるため、次の行はそれ以上入力を読み取らずにすぐに戻りcharます。入力バッファから改行を削除する必要があります。

int c;
do {
    c = getchar();
}while(c != '\n' && c != EOF);
if (c == EOF) {
    exit(EXIT_FAILURE); // input borked
}

また、コンパイラの警告に注意し、のword代わりに&wordを渡しto_rot13ます。

于 2012-11-01T20:02:51.557 に答える
1

に&wordを送信していますto_rot13(wordまたは&word [0]を送信する必要があります)

于 2012-11-01T20:02:27.767 に答える