I wrote this code that asks the user to input the number of triangles and triplets.
however when i print out the array elements I get a seg fault.
During the first iteration that the user is requested to enter the number of triplets everything works fine, after that it only prints out garbage.
Could anyone tell me where I went wrong?
#include < stdio.h >
#include < stdlib.h >
#define request "Please enter the number of triangles to check: "
#define triplet1 "Please enter the first number of the triplet: "
#define triplet2 "Please enter the second number of the triplet: "
#define triplet3 "Please enter the third number of the triplet: "
#define Error "[ERR] Invalid number of triangles.\n "
#define Error2 "[ERR] Invalid number for the triplet.\n"
#define UCHAR_MAX 20
Code:
int main() {
int triangles = 0;
char * end;
for (;;) {
printf("%s", request);
char buffer[30];
fgets(buffer, sizeof(buffer), stdin);
triangles = strtol(buffer, & end, 10);
if ( * end != '\n' || triangles < 1 || triangles > UCHAR_MAX) {
printf("%s", Error);
continue;
}
break;
}
float arr[triangles][3];
int i = 0;
int j = 0;
while (i < triangles) {
float tmp = 0.0;
char buffer[30];
while (1) {
printf("%s\n", triplet1);
fgets(buffer, sizeof(buffer), stdin);
tmp = strtol(buffer, & end, 10);
if ( * end != '\n' || tmp < 1) {
printf("%s", Error2);
continue;
}
arr[i][j] = tmp;
j++;
break;
}
tmp = 0.0;
while (1) {
printf("%s\n", triplet2);
fgets(buffer, sizeof(buffer), stdin);
tmp = strtol(buffer, & end, 10);
if ( * end != '\n' || tmp < 1) {
printf("%s", Error2);
continue;
}
arr[i][j] = tmp;
j++;
break;
}
tmp = 0.0;
while (1) {
printf("%s\n", triplet3);
fgets(buffer, sizeof(buffer), stdin);
tmp = strtol(buffer, & end, 10);
if ( * end != '\n' || tmp < 1) {
printf("%s", Error2);
continue;
}
arr[i][j] = tmp;
j++;
break;
}
i++;
}
for (i = 0; i < triangles; i++) {
for (j = 0; j < 3; j++) {
printf("a[%d][%d] = %f\n", i, j, arr[i][j]);
}
}
return 0;
}