文字列を後方から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言語としては」正常に動作しますが……