• ベストアンサー

文字列の入力について

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