scanf("%[^\n]%*c",str);
%[^\n]: \n を除くすべての文字に一致
scanf() 関数が Enter キーを押した後、\n がまだ入力バッファーにある場合は、%*c を使用して入力バッファーに残っている '\n' を吸収し、後続の入力が影響を受けないようにすることができます。
%*c: 文字に一致することを意味します (%c は一致する文字です) が、変数には割り当てられません。
上記の実装を使用して、スペースに遭遇したときに終了を解決し、scanf() を使用して gets() 関数を完了します
#include <stdio.h>
#pragma warning(disable:4996)
#include <stdio.h>
int main(void)
{
char str[100];
int i = 0;
scanf("%[^\n]%*c",str);
printf("%s->", str);
while (str[i] != '\0')
{
i++;
}
printf("%d", i);
return 0;
}
参考記事:
C言語学習ノート - scanf("%*[^\n]%*c"); - 哔哩哔哩
scanf("%[^\n]",str) - Expedition i - ブログガーデン
C言語のgetsとscanfの違い、getsとscanfの違い - プログラマー募集