• ベストアンサー

文字列の入力について

http://www.rs.kagu.tus.ac.jp/infoserv/j-siken/H11b2/pm11.html このプログラムを完成させたいのですが、 例えば、「abc dfg hij ・・・」とscanfで文字列入力した場合、空白以降(スペース)が読み取れません。 (「abc」しか読み取れません) スペース以降の文字列もキーボード入力できるようにするにはどうしたらいいのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • mac_res
  • ベストアンサー率36% (568/1571)
回答No.2

#include <stdio.h> #include <stdlib.h> #include <errno.h> #include <string.h> #define BUFFMAX 1024 #define WORDMAX 16 void wordwrap(char str[], int max) { char word[BUFFMAX / 2][WORDMAX], buff[BUFFMAX]; int leng[BUFFMAX / 2], i, idx, cnt, pos; /*** 文字列を単語に分解する ***/ i = idx = cnt = 0; while (str[i] != '\0') { if (str[i] == ' ') { word[idx][cnt] = '\0'; leng[idx] = cnt; idx++; cnt = 0; } else { word[idx][cnt] = str[i]; cnt++; } i++; } word[idx][cnt] = str[i]; leng[idx] = cnt; /*** 出力する ***/ i = pos = 0; while (i <= idx) { if ((pos + leng[i]) > max) { buff[pos - 1] = '\0'; printf("%s\n", buff); pos = 0; } strcpy(&buff[pos], word[i]); pos += leng[i]; buff[pos] = ' '; pos++; i++; } buff[pos - 1] = '\0'; printf("%s\n", buff); } int main(int argc, char *argv[]) { char buf[BUFFMAX + 1]; int len, i; FILE *fp; if (argc <= 1) { fprintf(stderr, "%s len [file]\n", argv[0]); exit(0); } len = atoi(argv[1]); if (argc > 2) { if ((fp = fopen(argv[2], "r")) == NULL) { fprintf(stderr, "Cannot open file %s\n", argv[2]); exit(errno); } } else { fp = stdin; } while (fgets(buf, BUFFMAX + 1, fp) != 0) { wordwrap(buf, len); } fclose(fp); return 0; }

その他の回答 (1)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

#include <stdio.h> char *fgets(char *s, int n, FILE *fp); を使う

関連するQ&A

  • 平成14年秋 問10 四角形 C言語

    http://www.rs.kagu.tus.ac.jp/infoserv/j-siken/H14b2/pm10.html 手がかりはどのように 求めればいいのでしょうか? 手が届かないです

  • 基本情報について

    このサイトの問4の3設問ができなくて困っています。わかるかたご教授よろしくお願いします。 http://www.rs.kagu.sut.ac.jp/~infoserv/j-siken/H11a2/pm03.html

  • トランザクション処理性能の問題

    このサーバの TPS の上限値は” ”の表現で 上限値は何を意味するのでしょうか? どなたか 解説を? http://www.rs.kagu.tus.ac.jp/infoserv/j-siken/H13b2/pm03.html

  • CASLの問題

    http://www.rs.kagu.tus.ac.jp/infoserv/j-siken/H11a2/pm10.html で被乗数を14ビットシフトの意味を理解できなく この問題を解けません どなたかご教授を

  • エクセルの「文字列の追加」の仕方

    ある列のセル内に、文字列 「ABC」 「HIJ」 「KML」 と入っている状態で、 それぞれのセルの文字列に、 『f=』という文字列を追加したいと思っています。 (完成後の状態) 「f=ABC」 「f=HIJ」 「f=KML」 この場合、どのようにするのが良いでしょうか…。 『=REPLACE(A1,1,1,"f=")』では、最初の文字が消えてしまうのでだめでした…。 御意見を頂けると嬉しいです。よろしくお願い致します。m(_ _)m

  • CASLII(基本情報)の過去問がわかりません!

    現在、基本情報技術者試験突破のため、CASLIIの過去問を解いているのですが、理解できなくて困ってます。 平成13年春期の問8です。 http://www.rs.kagu.sut.ac.jp/~infoserv/j-siken/H13a2/pm08.html 特に6行目のシフト演算命令以降が何をしてるのかがさっぱりです。。。 教えて頂けると嬉しいです・・・ お願いします!!

  • インクリメント

    情報処理の問題で一つわからない点があります http://www.rs.kagu.tus.ac.jp/infoserv/j-siken/H19a2/pm10.html 上記HPの「 d 」の答えなのですが rank++ と rank = i + 1 答えはどちらでもかまわないのではないでしょうか? インクリメントを使っての答えは間違いとなりますがどうして??? 教えてください

  • 平成17年度春の午後問題について教えてください

    ttp://www.rs.kagu.tus.ac.jp/infoserv/j-siken/H17a2/pm06.html の問題なのですが、空欄dが分かりません。 char_listはvoid print_string 関数内でアドレスで 受け取り、int word_width 関数でもアドレスで受け取っていると思うのですが、違うのでしょうか?

  • 初期化について教えてください

    http://www.rs.kagu.tus.ac.jp/infoserv/j-siken/H13b2/pm10.html この問題のプログラムでコードの初期化の方法が分からないので教えてください 例えば、配列 M[0][1]をROADとするにはどうしたらいいのでしょうか? M[0][1] = ROAD; としたとしても、M[0][1] は入り口(ENTRANCE)の役割もあるので、上みたいにそのまま代入しても上手くいかないのですが、どうやっていいのか分かりません。 お願いします。

  • Borland C++ Compilerで画像を扱うには

    基本情報技術者検定の問題でhttp://www.rs.kagu.tus.ac.jp/infoserv/j-siken/H9a2/pm07.html のプログラムをBorland C++ Compilerで作りたいのですが、画像が扱えないみたいなので調べてみたところ http://www.boutell.com/gd/のライブラリがあれば 画像が扱えるとどこかで見たのですが、これって Borland C++ Compilerにも使えるのでしょうか?