#include <stdio.h>
#include <stdlib.h>
#include <math.h>
struct vector
{
double x;
double y;
double z;
};
struct vector *array;
double length(struct vector*);
int main()
{
int num,i;
double xin;
double yin;
double zin;
char buffer[30];
char buffer2[30];
printf("Enter number of vectors:");
fgets(buffer, 30, stdin);
sscanf(buffer, "%d", &num);
array = malloc( sizeof(struct vector) * num);
for(i=0;i<=num;i++)
{
printf("Please enter x y z for the vector:");
fgets(buffer2,100,stdin);
sscanf(buffer2, " %lf %lf %lf", &xin, &yin, &zin);
array[i].x = xin;
array[i].y = yin;
array[i].z = zin;
}
for(i=0;i<=num;i++)
{
printf( "Vector:%lf %lf %lf has a length of %lf\n", array[i].x, array[i].y, array[i].z, length(&array[i]));
}
}
double length(struct vector* vec)
{
return sqrt( (vec->x * vec->x) + (vec->y * vec->y) + (vec->z * vec->z) );
}
Хорошо, приведенный выше код почти закончен, он запрашивает у пользователя количество векторов, затем он запрашивает у пользователя значения этих векторов, затем вычисляет длину и распечатывает ее соответственно.
Я пытаюсь получить здесь некоторую проверку ошибок, но, похоже, я не могу ее получить... Я просмотрел все возможные возвращаемые значения для fgets и sscanf, я просто не могу их получить.
Защитные функции
ПЕРВЫЙ printf ------- ввод должен быть только одним числом больше 0, а EOF должен возвращать сообщение типа printf ("введите число - до свидания!"), поэтому я попытался
while( sscanf(buffer, "%d", &num) ==1 && num > 0 )
но он все еще работает, если ввести что-то вроде 3dadswerudsad
также, когда пользователь вводит 3 значения для вектора, если для вектора вводится что-либо, кроме 3 двойных значений, программа должна завершиться сообщением, поэтому я попытался
while( sscanf(buffer2, "%lf %lf %lf", &xin, &yin, &zin) ==3 )
но он не проверяет эти неправильные входные данные!
я схожу с ума