行ごとに、入力を eg で文字列として読み取り、ループ内でfgets
egstrtok
を使用して各数値を抽出し、 を使用strtol
して数値を整数値に変換して加算します。
上記のソリューションには 4 つの部分が含まれているため、分割して 1 つずつ実行してみましょう。
各行について、 で入力を読み取りますfgets
。
これは非常に簡単です。外側のループを使用して、ユーザーにそこに数字を入力するように依頼するだけでなく、そこでも入力を読み取るだけです。
for (i = 1; i <= l; i++)
{
printf("Enter numbers for line number %d: ", i);
char input[128];
fgets(input, sizeof(input), stdin);
}
ループで使用strtok
して、入力から各数値を抽出します。
for (i = 1; i <= l; i++)
{
/* The code to read the input... */
char *pointer = strtok(input, " ");
while (pointer != NULL)
{
/* `pointer` is now pointing to the next space-delimited number */
/* Find the next space-delimited number */
pointer = strtok(NULL, " ");
}
}
strtol
数値を整数値に変換するために使用します。
{
/* `pointer` is now pointing to the next space-delimited number */
/* Convert string to number */
long value = strtol(pointer, NULL, 10);
/* Find the next space-delimited number... */
}
最後に、すべての値を行に追加します。
for (i = 1; i <= l; i++)
{
long sum = 0;
/* ... */
{
long value = strtol(pointer, NULL, 10);
sum += value;
}
printf("The sum of all values on line %d is %ld\n", i, sum);
}
すべてをまとめると、次のコードが得られます。
for (i = 1; i <= l; i++)
{
printf("Enter numbers for line number %d: ", i);
char input[128];
fgets(input, sizeof(input), stdin);
long sum = 0;
char *pointer = strtok(input, " ");
while (pointer != NULL)
{
/* `pointer` is now pointing to the next space-delimited number */
/* Convert string to number */
long value = strtol(pointer, NULL, 10);
sum += value;
/* Find the next space-delimited number */
pointer = strtok(NULL, " ");
}
printf("The sum of all values on line %d is %ld\n", i, sum);
}
注:上記のコードにはエラー チェックがありません。それは読者の課題として残しておきます。