回答編集履歴

2

追加

2020/07/30 08:48

投稿

amiya
amiya

スコア1218

test CHANGED
@@ -13,3 +13,85 @@
13
13
  fgetsは改行まで含めてしまうので、その分を減らすか、始めから複数行を前提で、「改行まで」の文字数を検知したいのであれば、
14
14
 
15
15
  `strchr(test,'\n')-test` 等として求めてください(これもバイト数です)
16
+
17
+
18
+
19
+
20
+
21
+ 今の状態だと、入力内容次第で問題が起きそうなので…こんな感じ?
22
+
23
+
24
+
25
+ ```C
26
+
27
+ #include <stdio.h>
28
+
29
+ #include <string.h>
30
+
31
+
32
+
33
+ #define MAXDATA 256
34
+
35
+
36
+
37
+ int main(void) {
38
+
39
+ char test[MAXDATA];
40
+
41
+ char flag = 0;
42
+
43
+
44
+
45
+ while (flag == 0) {
46
+
47
+ puts("何か文字を入力して、エンターキーを押してください");
48
+
49
+ printf(">>");
50
+
51
+ // 半角全角10文字以内を想定
52
+
53
+ fgets(test,MAXDATA,stdin);
54
+
55
+
56
+
57
+ char *p = strchr(test, '\n'); // 改行位置を取得
58
+
59
+ if (p != NULL){ // 改行があった場合
60
+
61
+ *p = '\0';       // 改行位置で文字列を終了させる
62
+
63
+ } else { //ついでにMAXDATAオーバーの処理
64
+
65
+ // 範囲を超えて入力された場合のオーバーラン対策
66
+
67
+ while (fgetc(stdin) != '\n');
68
+
69
+ }
70
+
71
+
72
+
73
+ int len = strlen(test); // 改めて長さを取得
74
+
75
+ if (len <= 30) { // 一文字3Byte固定なら30?
76
+
77
+ printf("%d\n", len);
78
+
79
+ printf("10文字以下で、%sと入力されました",test);
80
+
81
+ flag = 1;
82
+
83
+ }
84
+
85
+ }
86
+
87
+
88
+
89
+ return 0;
90
+
91
+ }
92
+
93
+ ```
94
+
95
+
96
+
97
+ scanfとかsscanfを使った方が手っ取り早い気がする。

1

追加

2020/07/30 08:48

投稿

amiya
amiya

スコア1218

test CHANGED
@@ -7,3 +7,9 @@
7
7
  ただし、正確にはこれで分かるのはバイト数であり、1文字が2バイト以上の文字コードを使った場合には、
8
8
 
9
9
  文字数とは限りません。
10
+
11
+
12
+
13
+ fgetsは改行まで含めてしまうので、その分を減らすか、始めから複数行を前提で、「改行まで」の文字数を検知したいのであれば、
14
+
15
+ `strchr(test,'\n')-test` 等として求めてください(これもバイト数です)