- ベストアンサー
ループ動作についての疑問
koi1234の回答
- koi1234
- ベストアンサー率53% (1866/3459)
>1つしかない変数の動作は分かりました。 >では、for文内の出力動作はどうなっているのでしょうか? >for文は条件式の成立後にまたfor文が実行されているように見えます。 1つしかない変数が都度変化した後に再度for分が繰り返されているだけです 1つしかない変数の動作を理解してれば悩むことないと思いますが #2さんが書かれてる1回目2回目ってのはwhile文に対しての回数です
関連するQ&A
- c言語の文字列の逆順のプログラムがわかりません
文字列を逆順して出力するプログラミングがわかりません。 #include <stdio.h> #include <string.h> void reverse(char *moji, char *gyaku); int main(void) { char x[30]; char y[30]; puts("文字を入力してください。\n"); scanf("%s", x); reverse(x, y); printf("逆順すると%sです。\n", y); return (0); } void reverse(char *moji, char *gyaku) { int i, len; len = strlen(moji); gyaku = moji + len - 1; for(i = 0; i < len; i ++){ putchar((int)*gyaku); gyaku--; } } 理想とする実行結果は 文字を入力してください。 abcdefg 逆順するとgfedcbaです。 なんですが、 上記のソースを実行すると 文字を入力してください。 abcdefg gfedcba逆順すると(謎の漢字)です。 となります。 どこがおかしいんでしょうか? よろしくおねがいします。
- ベストアンサー
- C・C++・C#
- ループのとめ方
入力した文字を小文字から大文字に 変えるプログラムで、コントロール+z で、ループを抜け出すようにしたい。 連続して2度コントロール+zを 押さないととまらないのですが、 どのようにすれば、1度コントロール+zを 押すだけで、終了できるのでしょうか? 何かアドバイスをお願いします。 ======================================== #include <stdio.h> #include <ctype.h> #include <string.h> int main(void) { char moji[50],check=0; int i,len; while(check !=EOF){ printf("Enter : "); check = scanf("%s",moji); len=strlen(moji); if(check!=EOF){ printf("Display : "); for(i=0;i<len;i++){ printf("%c",toupper(moji[i])); } } } return 0;
- ベストアンサー
- C・C++・C#
- 永久ループ・・・
どうも、最近C言語の勉強を始めた超初心者です。 int main(void) { int i; for(;;){ printf("桁数を入力してください。:"); scanf("%d",&i); if(i<=12) break; else puts("もう一度入力してください。"); continue; } return(0); } 上のソース、i<=12の条件を満たさなければループを繰り返すというプログラムなんですけど、数値を入力した場合は思った通りに挙動するのですが、文字や文字列を入力すると永久ループになります。scanf関数で返値を受け取って判定するなどいろいろ試したのですが、どうしても永久ループになってしまいます。 どうしてか教えてください。お願いします。
- ベストアンサー
- C・C++・C#
- 困っています
これを三段で実行してみたのですが、うまく表示できません。下のようになります。どこが間違っているか教えてください。お願いします。 * * * #include <stdio.h> int main(void) { int i, j, ln; printf("何段を表示しますか?"); scanf("%d", &ln); for(i=1; i<=ln; i++){ for(j=1; j<=ln-i; j++) putchar(' '); for(j=1; j<=i * 2 - 1; j++); putchar('*'); putchar('\n'); } return(0); }
- ベストアンサー
- C・C++・C#
- 困っています
このプログラムを以下に示す所を関数化し、該当する部分を関数呼び出すようにします。 1 非負の整数が入力されたかチェックする関数(非負は0、負は1を返す) 2非負の整数を読み込む関数 3渡された整数の1の位を返す関数 4アスタリスクを表示する関数 です。 全然分からないので詳しく教えてください。 お願いします。 int main(void) { int i; int num,kansu[10]; printf("整数を入力してください。"); scanf("%d", &num); for(i=0; i<10; i++) kansu[i]=0; do{ kansu[num % 10]++; num /= 10; }while(num>0); for (i=0; i <10; i++) { printf("%d",i); for (j =0; j < kazu[i]; j++) putchar('*'); putchar('\n'); } return(0); }
- 締切済み
- フリーウェア・フリーソフト
- fgetsを用いたループ処理後の入力について
http://oshiete1.goo.ne.jp/qa3853689.htmlにて質問した内容ですが、 想定していたソースの範囲内では解決しないことが分かりましたので、新規に立てさせていただきます。 下記でfgetsを使って入力した後についてですが、*2のgetcharを無視して、*1のscanfで入力を受け付けなくなります。 *2のgetscharについては、その個数を増やしても同様に無視されます。 これを解消する方法はないでしょうか? ちなみにコンパイラはBBC、開発環境はVistaです。 なお、簡略のため#includeなどは省略しています。 #define SIZE 16384 void main(void){ int mode,r; while(1){ do{ r = scanf("%d", &mode); //*1 return後に停止 while(getchar() != '\n'){ }; }while(r == 0) switch(mode){ //その他選択肢あり case 1: execute(); break; } } return; } void execute(void){ char moji[SIZE]; char buf[SIZE]; while(fgets(buf, sizeof(buf), stdin) != NULL){ if(sizeof(moji) < strlen(moji) + strlen(buf)) break; strcat(moji, buf); } while(getchar() != EOF){ } getchar(); //*2 これを無視して動作(scanfでも同様) return; }
- ベストアンサー
- C・C++・C#
- アスタリスクで正方形
アスタリスク(*)で正方形を作るプログラムをC言語で書いているのですが関数で描画部分を作ることが出来ません。動かす方法を教えて頂けないでしょうか #include <stdio.h> void seihoukei(void); int no,i,j,cnt; int main(void) { int cnt,i,j; do{ printf("数字(2-9)を入力して下さい:"); scanf("%d",&cnt); if(cnt<2||cnt>9){ printf("入力エラーです。もう一度入力して下さい"); } }while(cnt<2||cnt>9); for(i=1;i<cnt;i++){ for(j=1;j<=cnt;j++){ seihoukei(); } } return 0; } void seihoukei(void) { j = 1; while(j <= j){ putchar('*'); j=j+1; } putchar('\n'); }
- ベストアンサー
- C・C++・C#
- C言語について。
今、C言語に関する問題をやっているんですが、いまいちわかりません。 その問題というのは↓ ≪問題5 (繰り返し) 例題をもとに、次のような九九の表を出力するプログラムを作成しなさい。 1 2 3 4 5 6 7 8 9 2 4 6 8 10 12 14 16 18 ~(略) ≫ という問題です。それで、その例題というのは↓ ≪例題4 (for文、do while文) 次のプログラムは、入力された整数を一辺とする正方形を出力するプログラムである。動作確認をしなさい。 4 (←入力) **** (←出力) **** **** **** /* 正方形 */ #include <stdio.h> void main() { int hen, i, j; do{ printf("数字(2~9)を入力してください : "); scanf("%d", &hen); if( hen < 2 || hen > 9 ) printf("入力エラーです!\n"); }while( hen < 2 || hen > 9); for( i = 1 ; i <= hen ; i++) { for( j = 1 ; j <= hen ; j++) printf("*"); putchar('\n'); } } ≫ ≪例題5 (for文、do while文) 次のプログラムは、入力された整数を一辺とする二等辺三角形を出力するプログラムである。動作確認しなさい。 4 (←入力) * (←出力) ** *** **** /* 二等辺三角形 */ #include <stdio.h> void main() { int hen, i, j; do{ printf("数字(2~9)を入力してください : "); scanf("%d", &hen); if( hen < 2 || hen > 9 ) printf("入力エラーです!\n"); }while( hen < 2 || hen > 9 ); for( i = 1 ; i <= hen ; i++ ) { for( j = 1 ; j <= i ; j++ ) printf("*"); putchar('\n'); } } ≫ 以上の二つが例題です。 わかりづらかったらすみませんm(_ _)m わかる方(問題5を)教えてくださるとありがたいです。
- ベストアンサー
- C・C++・C#
- C言語で分からないことがあります。
私は初心者で、ある参考書で下記の例が載っていたのですが、このプログラムで分からないことがあります。 #include<stdio.h> void nchar(int ch,int no) { while(no-->0) putchar(ch); } int main(void) { int i,ln; printf("何段ですか:");scanf("%d",&ln); for(i=1;i<=ln;i++){ nchar(' ',ln-i); nchar('*',i); putchar('\n'); } return 0; } まず、 ・nchar関数のnoは何を表しているのか? ・nchar関数のputchar(ch)は一体何を表しているのか? 参考書にはこのプログラムについてあまり説明が無くこの2点がよく分かりません。 よろしくお願いします。
- ベストアンサー
- C・C++・C#
- 困っています
このプログラムを以下に示す所を関数化し、該当する部分を関数呼び出すようにします。 1 非負の整数が入力されたかチェックする関数(非負は0、負は1を返す) 2非負の整数を読み込む関数 3渡された整数の1の位を返す関数 4アスタリスクを表示する関数 です。 自分では、1は、 int isNotMinus(int n){ return (n < 0) ? 1 : 0 ; } だと思うのですが、2,3,4が分かりません。この 作った関数をmain関数で呼ぶときどうやるかも教えてください。宜しくお願いします。 int main(void) { int i; int num,kansu[10]; printf("整数を入力してください。"); scanf("%d", &num); for(i=0; i<10; i++) kansu[i]=0; do{ kansu[num % 10]++; num /= 10; }while(num>0); for (i=0; i <10; i++) { printf("%d",i); for (j =0; j < kazu[i]; j++) putchar('*'); putchar('\n'); } return(0); }
- 締切済み
- C・C++・C#
お礼
こちらの勘違いでputchar('\n');は確かに実行されていました。 for内を抜けた後の動作も「ANo.5」のご回答で解決しました。 どうもありがとうございました。