#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 )
но не проверява за тези неправилни входове!!
побърквам се