Kernighan と Ritchies の ch1 問題 12 に答えるために、次のプログラムを作成しました。
問題は、関数を適切に使用する方法を本当に理解したことがなく、このプログラムに書いたgetcharc()が機能しない理由を知りたいということです。
関数の正しい使用法を説明する優れたリソースは何ですか。どこ?そしてどうやって?
||
Richard Heathfield のサイト (ネストされた while ステートメントではなく orを使用) からこの問題の最適な解決策を知っていますが、プログラムを適切に動作させる方法を知りたいです。
#include <stdio.h>
int getcharc ();
// Exercise 1-12
// Copy input to output, one word per line
// words deleniated by tab, backspace, \ and space
int main()
{
int c;
while ((c = getchar()) != EOF) {
while ( c == '\t') {
getcharc(c);
}
while ( c == '\b') {
getcharc(c);
}
while ( c == '\\') {
getcharc(c);
}
while ( c == ' ') {
getcharc(c);
}
putchar(c);
}
}
int getcharc ()
{
int c;
c = getchar();
printf("\n");
return 0;
}
元のプログラム (バグがあることはわかっています) は、関数なしで次のようになりました。
#include <stdio.h>
// Exercise 1-12
// Copy input to output, one word per line
// words deleniated by tab, backspace, \ and space
int main()
{
int c;
while ((c = getchar()) != EOF) {
while ( c == '\t') {
c = getchar();
printf("\n");
}
while ( c == '\b') {
c = getchar();
printf("\n");
}
while ( c == '\\') {
c = getchar();
printf("\n");
}
while ( c == ' ') {
c = getchar();
printf("\n");
}
putchar(c);
}
}
したがって、私が関数でやろうとしているのは停止することだけです
c = getchar();
printf("\n");
毎回繰り返されています。