私はトリッキーなことに出くわしました。これは元のプログラムです:
#include <stdio.h>
int main(int argc, char *argv[])
{
// go through each string in argv
int i = 0;
while(i < argc) {
printf("arg %d: %s\n", i, argv[i]);
i++;
}
// let's make our own array of strings
char *states[] = {"cali","heo","arb","flu"};
int num_states = 4;
i = 0; // watch for this
while(i < num_states) {
printf("state %d: %s\n", i, states[i]);
i++;
}
return 0;
}
以下は、リンクで尋ねられた質問です: http://c.learncodethehardway.org/book/ex11.html
i-- を使用して argc から開始し、0 までカウントダウンすることにより、これらのループを逆方向にカウントします。配列インデックスが正しく機能するように、いくつかの計算を行う必要がある場合があります。
上記のこの質問については、上記のプログラムに修正を加えました。次のコードでは、while ループを 1 つしか実行できませんでした。両方のループを実行できません。私のコードを修正してください。
valgrind
デバッグ用のツールを使用しました。
#include <stdio.h>
int main(int argc, char *argv[])
{
int i = 2;
while(i < argc) {
printf("arg %d: %s\n", i, argv[i]);
i--;
}
char *states[] = {
"cali","heo","arb","flu"
};
int num_states = 4;
i = 3; // watch for this
while(i < num_states) {
printf("state %d: %s\n", i, states[i]);
i--;
}
return 0;
}
出力:
$ make while
$ ./while hey how
2 how
1 hey
0 ./while
Segmentation fault (core dumped)
$
そして、出力の別の方法については--
$ ./while
3 flu
2 arb
1 heo
0 cali
Segmentation fault (core dumped)
$
したがって、「上記の方法で同時に両方の while ループを実行することはできない」という私の主張です。初期化i=2
してデクリメントし、i
値を 3 に再初期化しました。