アプリ版:「スタンプのみでお礼する」機能のリリースについて

http://www.rs.kagu.tus.ac.jp/infoserv/j-siken/H1 …

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

A 回答 (2件)

#include <stdio.h>


char *fgets(char *s, int n, FILE *fp);
を使う
    • good
    • 0

#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;
}
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!