を使用してテキスト行全体を読み取り、fgets()
それを を使用して値に解析することもできますsscanf()
。
sscanf()
最初のパラメーターが文字列ポインターであることを除いて、fscanf()
同じように機能します。scanf()
sscanf()
一度に行全体を読み取ると、行番号でエラーを報告したり、失敗した場合に別のフォーマット文字列を使用して行を変換したりするなど、特定の操作が簡単になる場合があります。
楽しみのための例:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main()
{
char buffer[1024];
const size_t buffer_size = sizeof(buffer);
int line_number = 0;
while( fgets(buffer, buffer_size, stdin) ) {
size_t len = strlen(buffer);
double value;
line_number++;
if( buffer[len-1] == '\n' ) {
buffer[len-1] = '\0';
len--;
}
if( sscanf(buffer, " %lf", &value) != 1 ) {
fprintf(stderr, "stdin:%d: Unable to read value: \"%s\" makes no sense.\n", line_number, buffer);
exit(EXIT_FAILURE);
}
printf("Successfully read value %lf\n", value);
}
return EXIT_SUCCESS;
}