問題
文字列の配列を読み込む関数を作成する。
"$$$$$"を読み込んだ時点で読み込みを中断・終了する。
"$$$$$"より前に入力された全文字列を表示する。
下記は私が考えた、この問題に対するプログラムです。
c
1#define _CRT_SECURE_NO_WARNINGS 2#define N 128 3#define A 128 4#include <stdio.h> 5#include <string.h> 6#include <ctype.h> 7 8 9void put_strary2(const char s[][A], int n) 10{ 11 int i, j, l, m; 12 /*-入力-*/ 13 for (i = 0; i < n; i++) { 14 15 int j = 0; 16 int k = 0; 17 18 while (s[i][j]) { 19 do { 20 scanf("%c", &s[i][j]); 21 if (s[i][j] == '$') { 22 k++; 23 } 24 else 25 break; 26 j++; 27 } while (k < 5); 28 } 29 30 if (k == 5) 31 break; 32 33 } 34 /*-出力-*/ 35 printf("%d", i); 36 /*上の行はiに代入されてる値を調べるために追加しました。なぜi=0となってるのか分からないです*/ 37 for (l = 0; l < i; l++) { 38 for (m = 0; s[l][m] != '\0'; m++) { 39 printf("%c", s[l][m]); 40 } 41 printf("\n"); 42 } 43} 44 45 46int main(void) 47{ 48 char cs[N][A] = { "0" }; 49 printf("文字列を入力\n"); 50 put_strary2(cs, N); 51 52}
"$$$$$"を読み込んだ時点で読み込みを中断・終了するところまでは、実行できたのですが、"$$$$$"より前に入力された全文字列を表示することができませんでした。
そこで試しに、入力が終了したところでiの値を確認したところ0となっていました。
なぜi=0になってしまうのか理由が知りたいです。
宜しくお願いします。
下記は解決後のプログラムです。
c
1#define _CRT_SECURE_NO_WARNINGS 2#define N 128 3#define A 128 4#include <stdio.h> 5#include <string.h> 6#include <ctype.h> 7 8 9void put_strary2(char s[][A], int n) 10{ 11 int i, j, l, m; 12 /*-入力-*/ 13 for (i = 0; i < n; i++) { 14 15 int j = 0; 16 int k = 0; 17 18 scanf("%s", s[i]); 19 20 while (k < 5) { 21 if (s[i][j] == '$') { 22 k++; 23 j++; 24 } 25 else 26 break; 27 } 28 29 if (k == 5) 30 break; 31 32 } 33 /*-出力-*/ 34 printf("%d\n", i); 35 /*上の行はiに代入されてる値を調べるために追加しました。*/ 36 for (l = 0; l < i; l++) { 37 for (m = 0; s[l][m] != '\0'; m++) { 38 printf("%c", s[l][m]); 39 } 40 putchar('\n'); 41 } 42} 43 44 45int main(void) 46{ 47 char cs[N][A] = { "0" }; 48 printf("文字列を入力\n"); 49 put_strary2(cs, N); 50 51}
回答3件
あなたの回答
tips
プレビュー