teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

コードを追加

2021/07/02 05:50

投稿

kazuma-s
kazuma-s

スコア8222

answer CHANGED
@@ -6,4 +6,44 @@
6
6
  質問に「scanf("%[^\n]%*c", feel);やscanf("%[^\n]%*c*c", feel);を試してみたが、
7
7
  上手く行かなかった。」とあるのは、この scanf の前に別の scanf の "%d" や "%s" で
8
8
  文字列や数値を読み取った時の改行コードが入力に残っているからだと推察し、
9
- それを除去するために % の前にスペースを置いています。
9
+ それを除去するために % の前にスペースを置いています。
10
+
11
+ **追記2**
12
+ > しかし、同じ結果になりました。
13
+
14
+ 質問のコードは不完全です。
15
+ 仕方がないので、私は次のように int main(void) までを補って
16
+ コンパイルし、実行しました。
17
+ ```text
18
+ $ cat a.c
19
+ #include <stdio.h>
20
+ #include <time.h>
21
+
22
+ #define data_file "data.txt"
23
+
24
+ int main(void)
25
+ {
26
+ FILE *fp;
27
+ time_t curret = time(NULL);
28
+ struct tm *timer = localtime(&curret);
29
+ char feel[100];
30
+
31
+ if((fp = fopen(data_file, "w")) == NULL)
32
+ printf("\aファイルをオープンできません。\n");
33
+ else
34
+ {
35
+ printf("今日の気分は:"); scanf(" %[^\n]%*c", feel);
36
+ fprintf(fp, "%d %d %d %d %d %d %s\n",
37
+ timer->tm_yday + 1839, timer->tm_mon + 1, timer->tm_mday,
38
+ timer->tm_hour, timer->tm_min, timer->tm_sec, feel);
39
+ fclose(fp);
40
+ }
41
+ }
42
+ $ gcc a.c
43
+ $ ./a.out
44
+ 今日の気分は:very good
45
+ $ cat data.txt
46
+ 2021 7 2 14 44 56 very good
47
+ $
48
+ ```
49
+ 質問のコードで省略されている部分に問題があるのだと思います。

2

説明の追加

2021/07/02 05:50

投稿

kazuma-s
kazuma-s

スコア8222

answer CHANGED
@@ -1,3 +1,9 @@
1
1
  `scanf(" %99[^\n]%*c", feel);`
2
2
 
3
- これでどうでしょうか?
3
+ これでどうでしょうか?
4
+
5
+ **追記**
6
+ 質問に「scanf("%[^\n]%*c", feel);やscanf("%[^\n]%*c*c", feel);を試してみたが、
7
+ 上手く行かなかった。」とあるのは、この scanf の前に別の scanf の "%d" や "%s" で
8
+ 文字列や数値を読み取った時の改行コードが入力に残っているからだと推察し、
9
+ それを除去するために % の前にスペースを置いています。

1

入力文字数の制限を追加

2021/07/02 05:12

投稿

kazuma-s
kazuma-s

スコア8222

answer CHANGED
@@ -1,3 +1,3 @@
1
- `scanf(" %[^\n]%*c", feel);`
1
+ `scanf(" %99[^\n]%*c", feel);`
2
2
 
3
3
  これでどうでしょうか?