2013-05-20 3 views
0

Впервые пользователь stackoverflow, но долгое время посетитель. Я подумал, что было бы разумно начать более активно участвовать. Но во-первых, у меня есть небольшой вопрос :)Векторный ввод с использованием Scanf (язык C)

В принципе, я пытаюсь сделать 3 числа (может быть положительным, отрицательным или десятичным), каждый из которых разделен пробелом (XYZ) с использованием scanf и должен быть помещен в массив/struct (игнорируя пробелы) и возвращая сообщение об ошибке, если пользователь не вводит явно цифры или вводит их в неправильном формате. Возможно ли это с помощью scanf? Какая альтернатива?

Я искал вокруг различные вопросы, но я не мог найти ответ, который мог бы понять (первый таймер с C). Ссылка, объяснение или немного пример кода будут НАСТОЯТЕЛЬНО оценены :)

+0

начало написания короткой программы .... –

+1

что у вас есть? –

+0

У меня нет ничего в данный момент, потому что я был не уверен, что вы даже можете сделать это с помощью scanf в первую очередь - когда я получу домашнюю работу, чтобы получить решение jonathans для работы и опубликовать некоторые отзывы :) – koalarisms

ответ

2

Кажется, что вы хотите, чтобы три цифры были на одной линии; их распространение по нескольким линиям было бы неприемлемым. Вы не указали, что должно произойти, если на линии есть четвертое число.

Использование простого scanf(), это трудно, если не невозможно, контролировать это. Использование fgets() и sscanf() это возможно:

char line[4096]; 
while (fgets(line, sizeof(line), stdin) != 0) 
{ 
    double v1, v2, v3; 
    if (sscanf(line, "%g %g %g", &v1, &v2, &v3) != 3) 
     ...format error... 
    ...save v1, v2, v3 into your structure or array... 
} 

При желании, вы можете узнать, где закончил преобразование и проверить, что там не было никакого мусора на линии после трех цифр.

Смежные вопросы