質問編集履歴

9

2021/07/05 00:18

投稿

suguri
suguri

スコア0

test CHANGED
File without changes
test CHANGED
File without changes

8

2021/07/05 00:18

投稿

suguri
suguri

スコア0

test CHANGED
File without changes
test CHANGED
@@ -60,7 +60,7 @@
60
60
 
61
61
 
62
62
 
63
- if ((fd = open("abc.txt", O_RDONLY)) == -1) {
63
+ if ((fd = open("alph.txt", O_RDONLY)) == -1) {
64
64
 
65
65
  perror("open");
66
66
 
@@ -72,7 +72,7 @@
72
72
 
73
73
 
74
74
 
75
- if ((fd2 = open("abc.txt", O_RDONLY)) == -1) {
75
+ if ((fd2 = open("alph.txt", O_RDONLY)) == -1) {
76
76
 
77
77
  perror("open");
78
78
 

7

2021/07/05 00:14

投稿

suguri
suguri

スコア0

test CHANGED
File without changes
test CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  alph.txtにはアルファベットの文字列が書かれており、今は6文字目を指定してabcdefが表示されるようになものは出来ました。
8
8
 
9
- f以降を表示するにはどうしたら良いですか?
9
+
10
10
 
11
11
  表示は
12
12
 
@@ -14,13 +14,25 @@
14
14
 
15
15
  ghij.....
16
16
 
17
- のようにしたいです
17
+ のようにしたいですが、
18
+
19
+ abcdef
20
+
21
+ abcdefgh….
22
+
23
+ になってしまいます。
18
24
 
19
25
 
26
+
27
+ 同じファイルを参照している為、配列の中身を16で指定すればそうなってしまう事はわかるのですが、どのように改変したら良いでしょうか。
28
+
29
+ また、ifを繰り返してしまい見づらいコードになってしまいました。申し訳ございません。
20
30
 
21
31
  ```
22
32
 
23
33
  コード
34
+
35
+
24
36
 
25
37
  #include <stdio.h>
26
38
 
@@ -40,15 +52,27 @@
40
52
 
41
53
  int fd;
42
54
 
55
+ int fd2;
56
+
43
57
  char buf[256];
44
58
 
45
- int x;
59
+ char buf2[256];
46
60
 
47
61
 
48
62
 
63
+ if ((fd = open("abc.txt", O_RDONLY)) == -1) {
64
+
65
+ perror("open");
66
+
67
+ exit(1);
68
+
69
+ }
49
70
 
50
71
 
72
+
73
+
74
+
51
- if ((fd = open("alph.txt", O_RDONLY)) == -1) {
75
+ if ((fd2 = open("abc.txt", O_RDONLY)) == -1) {
52
76
 
53
77
  perror("open");
54
78
 
@@ -66,13 +90,25 @@
66
90
 
67
91
  }
68
92
 
93
+ if (read(fd2,buf2,16)!= 16){
94
+
95
+ perror("read");
96
+
97
+ exit(1);
98
+
99
+ }
100
+
69
101
 
70
102
 
71
103
  buf[6] = '\0'; //6文字めまで表示
72
104
 
73
-
105
+ buf2[16]='\0';
106
+
107
+
74
108
 
75
109
  printf("%s\n", buf);
110
+
111
+ printf("%s\n",buf2);
76
112
 
77
113
 
78
114
 
@@ -83,6 +119,20 @@
83
119
  exit(1);
84
120
 
85
121
  }
122
+
123
+
124
+
125
+
126
+
127
+ if (close(fd2) == -1) {
128
+
129
+ perror("close");
130
+
131
+ exit(1);
132
+
133
+ }
134
+
135
+
86
136
 
87
137
 
88
138
 

6

2021/07/05 00:13

投稿

suguri
suguri

スコア0

test CHANGED
File without changes
test CHANGED
File without changes

5

2021/07/05 00:12

投稿

suguri
suguri

スコア0

test CHANGED
File without changes
test CHANGED
File without changes

4

2021/07/04 23:51

投稿

suguri
suguri

スコア0

test CHANGED
@@ -1 +1 @@
1
- テキストを分割してファイルに保存するプログラムについて
1
+ テキストファイルを分割して表示する方法
test CHANGED
@@ -1,48 +1,20 @@
1
- C言語について、プログラミング初心者です。
2
-
3
- テキストの文字分割しそれぞれファイルに保存するプログラムを作りいです
1
+ 基礎的な事にしようと思い、質問変えさせだきました
4
2
 
5
3
 
6
4
 
7
- キーボードから指定したテキストファイルを開いて、abcdeなどの文字が入力されていた場合、キーボードから指定した文字数(例えば2と入力するとabとcde)のように分割してそれぞれ別のファイルに保存するプログラムを作りたいです。
8
-
9
- なんとなくの筋道は立てたのですがこの先どうしたら良いか分からないため質問させていただきました。
10
5
 
11
6
 
7
+ alph.txtにはアルファベットの文字列が書かれており、今は6文字目を指定してabcdefが表示されるようになものは出来ました。
12
8
 
13
- 具体的な内容とては
9
+ f以降を表示するにはどうたら良いですか?
14
10
 
15
- 1.表示結果をout1にコピーしたい
11
+ 表示
16
12
 
17
- 2.表示されていない残りの文字をout2にコピーしたい
13
+ abcdef
18
14
 
19
- です。
15
+ ghij.....
20
16
 
21
- くお願致します。
17
+ のようにす。
22
-
23
-
24
-
25
- C言語について、プログラミング初心者です。
26
-
27
- テキスト内の文字を分割してそれぞれファイルに保存するプログラムを作りたいです。
28
-
29
-
30
-
31
- キーボードから指定したテキストファイルを開いて、abcdeなどの文字が入力されていた場合、キーボードから指定した文字数(例えば2と入力するとabとcde)のように分割してそれぞれ別のファイルに保存するプログラムを作りたいです。
32
-
33
- なんとなくの筋道は立てたのですがこの先どうしたら良いか分からないため質問させていただきました。
34
-
35
-
36
-
37
- 具体的な内容としては
38
-
39
- 1.表示結果をout1にコピーしたい
40
-
41
- 2.表示されていない残りの文字をout2にコピーしたい
42
-
43
- です。
44
-
45
- 宜しくお願い致します。
46
18
 
47
19
 
48
20
 
@@ -50,17 +22,15 @@
50
22
 
51
23
  コード
52
24
 
25
+ #include <stdio.h>
53
26
 
27
+ #include <stdlib.h>
54
28
 
55
- #include <stdio.h>
29
+ #include <sys/types.h>
56
30
 
57
- #include <stdlib.h>
31
+ #include <sys/stat.h>
58
32
 
59
- #include <sys/types.h>
60
-
61
- #include <sys/stat.h>
62
-
63
- #include <fcntl.h>
33
+ #include <fcntl.h>
64
34
 
65
35
  #include <unistd.h>
66
36
 
@@ -70,25 +40,15 @@
70
40
 
71
41
  int fd;
72
42
 
73
- ssize_t cc;
43
+ char buf[256];
74
44
 
75
- char file[256];//入力ファイル
76
-
77
- char out1[256];//出力ファイル1
78
-
79
- char out2[256];//出力ファイル2
80
-
81
- char x[256]; //分割する値
45
+ int x;
82
-
83
- char buf[256]; /* 5 byte characters plus null(\0) */
84
-
85
- scanf("%s%s%s%d",&file,out1,out2,x);で入力、出力1、出力2、分割数をキーボードから入力
86
46
 
87
47
 
88
48
 
89
49
 
90
50
 
91
- if ((fd = open("file", O_RDONLY)) == -1) {
51
+ if ((fd = open("alph.txt", O_RDONLY)) == -1) {
92
52
 
93
53
  perror("open");
94
54
 
@@ -98,7 +58,7 @@
98
58
 
99
59
 
100
60
 
101
- if (read(fd, buf, x) != x) {
61
+ if (read(fd, buf, 6) != 6) {
102
62
 
103
63
  perror("read");
104
64
 
@@ -108,11 +68,11 @@
108
68
 
109
69
 
110
70
 
111
- buf[x] = '\0';
71
+ buf[6] = '\0'; //6文字めまで表示
112
72
 
113
73
 
114
74
 
115
- printf("%s\n", buf); //このprintfの表示内容をout1に入力したい。
75
+ printf("%s\n", buf);
116
76
 
117
77
 
118
78
 

3

2021/07/04 23:47

投稿

suguri
suguri

スコア0

test CHANGED
File without changes
test CHANGED
@@ -52,17 +52,17 @@
52
52
 
53
53
 
54
54
 
55
- #include <stdio.h> /* perror, printf */
55
+ #include <stdio.h>
56
56
 
57
- #include <stdlib.h> /* exit */
57
+ #include <stdlib.h>
58
58
 
59
- #include <sys/types.h> /* open, read */
59
+ #include <sys/types.h>
60
60
 
61
- #include <sys/stat.h> /* open */
61
+ #include <sys/stat.h>
62
62
 
63
- #include <fcntl.h> /* open */
63
+ #include <fcntl.h>
64
64
 
65
- #include <unistd.h> /* close, read */
65
+ #include <unistd.h>
66
66
 
67
67
 
68
68
 

2

2021/07/04 16:53

投稿

suguri
suguri

スコア0

test CHANGED
File without changes
test CHANGED
@@ -22,7 +22,7 @@
22
22
 
23
23
 
24
24
 
25
- ```C言語について、プログラミング初心者です。
25
+ C言語について、プログラミング初心者です。
26
26
 
27
27
  テキスト内の文字を分割してそれぞれファイルに保存するプログラムを作りたいです。
28
28
 
@@ -46,21 +46,23 @@
46
46
 
47
47
 
48
48
 
49
+ ```
50
+
51
+ コード
49
52
 
50
53
 
51
- ```
52
54
 
53
- #include <stdio.h>
55
+ #include <stdio.h> /* perror, printf */
54
56
 
55
- #include <stdlib.h>
57
+ #include <stdlib.h> /* exit */
56
58
 
57
- #include <sys/types.h>
59
+ #include <sys/types.h> /* open, read */
58
60
 
59
- #include <sys/stat.h>
61
+ #include <sys/stat.h> /* open */
60
62
 
61
- #include <fcntl.h>
63
+ #include <fcntl.h> /* open */
62
64
 
63
- #include <unistd.h>
65
+ #include <unistd.h> /* close, read */
64
66
 
65
67
 
66
68
 
@@ -132,6 +134,6 @@
132
134
 
133
135
 
134
136
 
135
- コード
137
+
136
138
 
137
139
  ```

1

2021/07/04 16:48

投稿

suguri
suguri

スコア0

test CHANGED
File without changes
test CHANGED
@@ -1,4 +1,28 @@
1
1
  C言語について、プログラミング初心者です。
2
+
3
+ テキスト内の文字を分割してそれぞれファイルに保存するプログラムを作りたいです。
4
+
5
+
6
+
7
+ キーボードから指定したテキストファイルを開いて、abcdeなどの文字が入力されていた場合、キーボードから指定した文字数(例えば2と入力するとabとcde)のように分割してそれぞれ別のファイルに保存するプログラムを作りたいです。
8
+
9
+ なんとなくの筋道は立てたのですがこの先どうしたら良いか分からないため質問させていただきました。
10
+
11
+
12
+
13
+ 具体的な内容としては
14
+
15
+ 1.表示結果をout1にコピーしたい
16
+
17
+ 2.表示されていない残りの文字をout2にコピーしたい
18
+
19
+ です。
20
+
21
+ 宜しくお願い致します。
22
+
23
+
24
+
25
+ ```C言語について、プログラミング初心者です。
2
26
 
3
27
  テキスト内の文字を分割してそれぞれファイルに保存するプログラムを作りたいです。
4
28
 
@@ -26,33 +50,43 @@
26
50
 
27
51
  ```
28
52
 
29
- #include <sys/types.h>
53
+ #include <stdio.h>
30
54
 
31
- #include <sys/stat.h>
55
+ #include <stdlib.h>
32
56
 
33
- #include <fcntl.h>
57
+ #include <sys/types.h>
34
58
 
59
+ #include <sys/stat.h>
60
+
61
+ #include <fcntl.h>
62
+
35
- #include <unistd.h>
63
+ #include <unistd.h>
64
+
65
+
66
+
67
+ int main(void) {
68
+
69
+ int fd;
70
+
71
+ ssize_t cc;
72
+
73
+ char file[256];//入力ファイル
74
+
75
+ char out1[256];//出力ファイル1
76
+
77
+ char out2[256];//出力ファイル2
78
+
79
+ char x[256]; //分割する値
80
+
81
+ char buf[256]; /* 5 byte characters plus null(\0) */
82
+
83
+ scanf("%s%s%s%d",&file,out1,out2,x);で入力、出力1、出力2、分割数をキーボードから入力
36
84
 
37
85
 
38
86
 
39
87
 
40
88
 
41
- char file[256];//入力ファイル
42
-
43
- char out1[256];//出力ファイル1
44
-
45
- char out2[256];//出力ファイル2
46
-
47
- int x[]; //分割する値
48
-
49
- scanf("%s%s%s%d",&file,out1,out2,x);で入力、出力1、出力2、分割数をキーボードから入力
50
-
51
-
52
-
53
- //ファイルを開く
54
-
55
- if ((fd = open("file", O_RDONLY)) == -1) {
89
+ if ((fd = open("file", O_RDONLY)) == -1) {
56
90
 
57
91
  perror("open");
58
92
 
@@ -60,7 +94,7 @@
60
94
 
61
95
  }
62
96
 
63
- //指定したx(バイト数)までを表示
97
+
64
98
 
65
99
  if (read(fd, buf, x) != x) {
66
100
 
@@ -72,11 +106,11 @@
72
106
 
73
107
 
74
108
 
75
- buf[x] = '\0'; /* null terminating character */
109
+ buf[x] = '\0';
76
110
 
77
111
 
78
112
 
79
- printf("%s\n", buf); このprintfの表示内容をout1に入力したい。
113
+ printf("%s\n", buf); //このprintfの表示内容をout1に入力したい。
80
114
 
81
115
 
82
116
 
@@ -96,9 +130,7 @@
96
130
 
97
131
  }
98
132
 
99
-
100
-
101
-
133
+
102
134
 
103
135
  コード
104
136