文字列を後方から1文字ずつ消去していくプログラムを作りました。正常に動作しているのですが、先々のことまで考えると直しておきたい部分があります。
どこを直すのがいいか分かりますか?
main.c
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
bool delete(char *pText) {
size_t length = strlen(pText);
if (length > 0) {
pText[length - 1] = '\0';
return true;
}
return false;
}
int main(void) {
char text[] = "Hello!!";
while (delete(text)) {
printf("deleted: %s\n", text);
}
return EXIT_SUCCESS;
}
実行結果
deleted: Hello!
deleted: Hello
deleted: Hell
deleted: Hel
deleted: He
deleted: H
deleted:
今回のプログラムは、1つ前の問題より分かりやすいんじゃないかしら。
そうですね。解読してみます!
えっと、
main()
の内側にwhile
があって……
char text[] = "Hello!!";
while (delete(text)) {
printf("deleted: %s\n", text);
}
この
delete()
っていう関数の処理が成功している間だけループして、テキストを表示してるんですかね。
そうそう。実行結果を見ると、テキストの変化が分かるわね。
そうですね。うしろから1文字ずつ消えていってます。
じゃあ、
delete()
関数の中身は……
bool delete(char *pText) {
size_t length = strlen(pText);
if (length > 0) {
pText[length - 1] = '\0';
return true;
}
return false;
}
これは、文字列の最後の1文字を
'\0'
、つまりヌル文字に置き換える処理で消してるんですね!
そうね。戻り値はどうなってるかしら?
はい。文字が消せたら
true
、消す文字がなければfalse
になります!
これは、
bool
で処理の成功・失敗を返しているということよ。
ふむふむ。だから
while
でループできるんですね。
そういうこと!それじゃあ、問題文に戻りましょうか。
そうでした。先々のことを考えて、どこを直すか?でしたよね。
今回のプログラムは、「C言語としては」正常に動作しますが……