1. ## Multidimensional String

How the hell would you, read in the first, middle, and last name of 150 people, keeping in mind that each name should be limited to 30 characters.

I have tried using %ns in a scanf, but it just keeps going anyway.

As of right now I am trying to figure out a way to do it in a multidimensional array, looking like
Code:
`char names[150][3][30]`
I am also currently using c = getchar(), and trying to figure out a way.

I will post my code, but it's of very little help since it just consists of about 3 practice programs that I am doing to try and understand what the hell to do. Had about 5 of them going, but just deleted a couple once I understood a bit more.

Any help would be greatly appreciated. I would like to specifically use either getchar() or scanf, because it can be done that way. Instead of just jumping to a more useful function, I'd like to learn how to understand these two first.

Thanks again.

Here's the ridiculous code:

Code:
```/*#include <stdio.h>

int main ()

{

char names[5][5];
int i,j;

printf("Enter 3 names:\n");

for(i = 0; i < 3; i++)
for(j = 0; j < 5; j++)
names[i][j] = '#';

for(i=0;i<3;i++)
scanf("%4s",names[i]);

for(i = 0; i < 3; i++)
for(j = 0; j < 5; j++){
printf("names[%d][%d]: %c ", i, j, names[i][j]);
if ( (j + 1) % 4 == 0)
printf("\n\n");
}
for(i=0;i<3;i++)
printf("%s\n",names[i]);

return 0;

}

*/

/*
char name[150][3][30];

printf("Enter your first name, middle name, and last name.\n");

for (i = 0; i < 1; i++)
for(j = 0;

scanf("%5s", name, name, name);

printf("%s\n", name[0]);

return 0;

}

*/
/*
#include <stdio.h>

int main ()

{

char names[1][3][5];
int i,j,k;

for(i = 0; i < 3; i++)
for(j = 0; j < 3; j++)
for (k = 0; k < 5; k++)
names[i][j][k] = '#';

for(i=0;i<1;i++)
scanf("%s",names);

for(i = 0; i < 1; i++)
for(j = 0; j < 3; j++)
for(k = 0; k < 5; k++)
{
printf("names[%d][%d][%d]: %c ", i, j, k, names[i][j][k]);
if ( (k + 1) % 4 == 0)
printf("\n\n");
}
for(i=0;i<1;i++)
printf("\n%s\n",names[i]);

return 0;

}

*/

#include <stdio.h>

int main ()

{

char names[2][3][30];//, c;
int i, j, k,c;

printf("Enter 2 full names\n");

i = 0;
j = 0;
k = 0;

do {

c = getchar();

if ( k == 29)
names[i][j][k] = '\0';

names[i][j][k++] = c;

if ((j != 0) && (j % 2 == 0)){
i++;
j = 0;
}

//j++;

printf("names [%d][%d][%d]: %c \n", i, j, k, names[i][j][k]);
}

while(c != '\n' && c != ' ');
names[i][j][k++] = c;
return 0;

}```

2. Another thing, in my last program,

Code:
```#include <stdio.h>

int main ()

{

char names[2][3][30];//, c;
int i, j, k,c;

printf("Enter 2 full names\n");

i = 0;
j = 0;
k = 0;

do {

c = getchar();

if ( k == 29)
names[i][j][k] = '\0';

names[i][j][k++] = c;

if ((j != 0) && (j % 2 == 0)){
i++;
j = 0;
}

//j++;

printf("names [%d][%d][%d]: %c \n", i, j, k, names[i][j][k]);
}

while(c != '\n' && c != ' ');
names[i][j][k++] = c;
return 0;

}```
Although far from done, it gives me letters back when I use ++k in this line
Code:
`names[i][j][k++] = c;`
in the do while loop.

However when it has k++, as in that code, it just gives me a squiggly bracket thing.

Any ideas?

3. Hah, I apologize if my question is poorly worded...just typing out whatever comes to mind.

I have decided to split this into 1-D arrays first, and at least get that to work.

Any ideas, pointers (even pointers in C), or tips are greatly appreciated.

Thanks.

4. Code:
```#include <stdio.h>

char First[30];
char Middle[30];
char Last[30];
char FullName[120];

int main()
{
int loop;

for(loop = 0; loop < 150; loop++)
{
scanf("%s %s %s", First, Middle, Last);

sprintf(FullName, "%s %s %s", First, Middle, Last);

printf("\n\nName %d: %s\n\n", loop + 1, FullName);
}

return 0;
}```
Is that what your wanting to do? or store them in a file?

5. Thanks for your response man.

I do want to store them in an array, or else I really can't do anything with them.

I have a potential max of 150 people, and a maximum of 30 characters for each name (first, middle, last).

6. This code still has a couple of bugs, and is not done, but you can see what I did for the strings.

I wanted to do this though in a 3-D array, but have no idea how to do so.

It's in bold.

Code:
```
#include <stdio.h>
#include <ctype.h>

#define MAX_SCORE  100
#define MIN_SCORE  0
#define TOTAL_ASSIGNMENT_MAX_SCORE 300
#define MAX_STUDENTS 150
#define MAX_LETTERS 30

float take_score (char first_names[][MAX_LETTERS],
char middle_names[][MAX_LETTERS],
char last_names[][MAX_LETTERS],
int i);
float final_score_calc (float student_grades[][3], int x);
char letter_grade (float x, int y);
float G_P_A (char grades[], int x, int y);
void info_display (void);
void print_scores (char first_names[][MAX_LETTERS],
char middle_names[][MAX_LETTERS],
char last_names[][MAX_LETTERS],
float x, char y, float z, int i);
float high_score_calc (float x, float y);
float low_score_calc (int x, float y, float z);

int main () {

return 0;

}

char c;
float final_score, total_final_score = 0, average_final_score = 0, high_score = 0, low_score = 0 ;
float A_Percentage = 0, B_Percentage = 0, C_Percentage = 0, D_Percentage = 0, F_Percentage= 0;
int student_counter = 0, ACounter = 0, BCounter = 0, CCounter = 0, DCounter = 0, FCounter = 0,
int i = -1; // Start at -1 so it does not equal 1 and the array later skips the 0 element
char first_names    [MAX_STUDENTS][MAX_LETTERS];
char middle_names   [MAX_STUDENTS][MAX_LETTERS];
char last_names     [MAX_STUDENTS][MAX_LETTERS];
float GPA;

do{

printf("A/a  - Add a student's record\n");
printf("I/i - load students record from an input file\n");
printf("O/o - Save students record to an output file\n");
printf("L/l - display a list of students score\n");
printf("D/d - Display current statistical results\n");
printf("Q/q - Quit\n");
printf("\nPlease enter a key for one of the above options:");

c=getchar();
c=toupper(c);

switch (c) {

case 'A':

i++;  /*This is done so that when take_score(i) is called, the array in the function
knows to start on the next element, and it doesn't erase old elements.*/

final_score = take_score(first_names, middle_names, last_names, i);

//printf("%f %c %f\n\n", final_score, grades[i], GPA);
print_scores(first_names, middle_names, last_names, final_score, (grades[i]), GPA, i);

student_counter ++;

case 'A': ACounter++;
break;

case 'B': BCounter++;
break;

case 'C': CCounter++;
break;

case 'D': DCounter++;
break;

case 'F': FCounter++;
break;

}

total_final_score += final_score;

average_final_score = (total_final_score / student_counter);

high_score = high_score_calc(final_score, high_score);

low_score = low_score_calc(student_counter, low_score, final_score);

total_Grade_Count = ACounter + BCounter + CCounter + DCounter + FCounter;

A_Percentage = (( float ) ACounter / total_Grade_Count) * 100;
B_Percentage = (( float ) BCounter / total_Grade_Count) * 100;
C_Percentage = (( float ) CCounter / total_Grade_Count) * 100;
D_Percentage = (( float ) DCounter / total_Grade_Count) * 100;
F_Percentage = (( float ) FCounter / total_Grade_Count) * 100;

break;

case 'D':

printf("\n\tTotal Students Number:\t%d", student_counter);
printf("\n\tAverage score:\t%.2f",average_final_score);
printf("\n\tHighest score:\t%.2f",high_score);
printf("\n\tLowest score:\t%.2f",low_score);
printf("\n\tTotal A grade: %d, percentage   %.2f%%", ACounter, A_Percentage);
printf("\n\tTotal B grade: %d, percentage   %.2f%%", BCounter, B_Percentage);
printf("\n\tTotal C grade: %d, percentage   %.2f%%", CCounter, C_Percentage);
printf("\n\tTotal D grade: %d, percentage   %.2f%%", DCounter, D_Percentage);
printf("\n\tTotal F grade: %d, percentage   %.2f%%\n\n", FCounter, F_Percentage);

break;

}

getchar ();

}while (c != 'Q' );

printf("\nBye!\n\n");

}

float final_score_calc (float student_grades[MAX_STUDENTS][3], int x)

{

float final_score;

return final_score;

}

float take_score (char first_names[][MAX_LETTERS],
char middle_names[][MAX_LETTERS],
char last_names[][MAX_LETTERS],
int i) {

float final_score;

char c;

int j = 0, k= 0;

printf("\nEnter a student's name (first middle last), total assignment, midterm and final exam scores:");

scanf("%s %s %s", first_names[i], middle_names[i], last_names[i]);

{
printf("\nPlease re-enter total assignment score (0~300) :");
}

{
printf("\nPlease re-enter midterm score (0~100) :");
}

{
printf("\nPlease re-enter final exam score (0~100) :");
}

return final_score;

}

char letter_grade (float x, int i) {

float final_score = x;

float final_scores[MAX_STUDENTS];

final_scores[i] = final_score;

if (final_scores[i] >= 90)

else if (final_scores[i] < 90 && final_scores[i] >= 80)

else if (final_scores[i] < 80 && final_scores[i] >= 70)

else if (final_scores[i] < 70 && final_scores[i] >= 60)

else if (final_scores[i] < 60)

}

float G_P_A (char grades[], int x, int y) {

float GPAs[MAX_STUDENTS];

int i = y;

case 'A': GPAs[i] = 4;
break;

case 'B': GPAs[i] = 3;
break;

case 'C': GPAs[i] = 2;
break;

case 'D': GPAs[i] = 1;
break;

case 'F': GPAs[i] = 0;
break;

}

return GPAs[i];

}

void print_scores (char first_names[][MAX_LETTERS],
char middle_names[][MAX_LETTERS],
char last_names[][MAX_LETTERS],
float x, char y, float z, int i) {

printf("\n%s %s %s's final_score:   %.2f  letter grade:%c  GPA:%d\n\n", first_names[i], middle_names[i],
last_names[i], x, y, z);

}

float high_score_calc (float x, float y) {

if (x > y)
y = x;

return y;

}

float low_score_calc (int x, float y, float z) {

/*	x = student_counter
y = low_score
z = final_score */

switch (x) {

case 1:

y = z;
break;

default:

if (y > z)
y = z;
break;
}

return y;

}```

7. may I suggest using a struct?

Code:
```#include <stdio.h>

struct Data
{
char First[30];
char Middle[30];
char Last[30];

int scores;
};

struct Data Student[150];

int main()
{
int loop;

for(loop = 0; loop < 150; loop++)
{
scanf("%s %s %s", Student[loop].First, Student[loop].Middle, Student[loop].Last);

printf("\n\nName %d: %s %s %s\n\n", loop + 1, Student[loop].First, Student[loop].Middle, Student[loop].Last);
}

return 0;
}```

8. You sure can my friend, but I haven't learned them yet lol.

That's next chapter .

Man, I took a CS programming course at my university once, I went to about 3 classes. I ended up with an A+ because I cheated like a madman, but I learned absolutely nothing.

I remember walking in one day, they were doing structs, something about pops and snaps or whatnot, and I just walked out, haha.

Now, I'm just trying to learn it out of my own accord. Amazing how things change eh?

9. Originally Posted by Beast()
Man, I took a CS programming course at my university once, I went to about 3 classes. I ended up with an A+ because I cheated like a madman, but I learned absolutely nothing.
Thanks for that bit of info. I'll be sure and not answer your questions from now on.

Quzah.

10. I think I'll bookmark this post and quote it to all the "please do my homework" posters

11. Ahh..interesting.

So when a man sees the error in his ways, sees that the path he is walking on is crooked and will not go anywhere, sees that he is wasting his time and the time of those around him, he's still at fault?

When he is actually honest about the error in his past ways, and decides to take the bull by the horns and go forward by himself, he's still a cheat?

I'm not trying to instill some bull.......... guilt in you guys, but you guys seem to have misunderstood me.

In the past I cheated IN the class because I was a lazy bastard. In fact I cheated my way out of a lot of things, reading CliffNotes, saving answers in my calculator, little cheat sheets on tests, anything you could imagine I have probably done it.

It's not that I was too dumb to do well on my own merit, but just too lazy...or thought it was useless.

Now after some soul-searching, I realize knowledge is key to life...you can learn something everywhere you look. We may not always know where we're going but we can be sure that some extra knowledge along the way can only aid our journey.

Instead of quitting my major, in which C programming is the building block of it all, I have decided to stay here and learn. Another class in which I had problems with was Calculus, ending up with a C-. Instead of saying ".......... this I will never need it again," I plan on taking all 5 levels.

You can trust that I am not here to cheat my way out of anything. You can trust that I am here not only as an ardent learner, but hope to one day give back to those in my same situation. Hell, my scholarship won't even pay for summer classes. Class is still in session but I'm the teacher and this site the occasional tutor.

Sorry for the book, but please don't take me for someone that I am not.

12. Originally Posted by Beast()
Ahh..interesting.

So when a man sees the error in his ways, sees that the path he is walking on is crooked and will not go anywhere, sees that he is wasting his time and the time of those around him, he's still at fault?
Stop trying to play the martyr. You've "see[n] the error in [your] ways"? Really? Here, let me quote you:
Originally Posted by Beast()
I remember walking in one day, they were doing structs, something about pops and snaps or whatnot, and I just walked out, haha.
Yeah, you seem real sincere.

Originally Posted by Beast()
Sorry for the book, but please don't take me for someone that I am not.

Quzah.

13. Beastie - most of the people who CAN answer questions stayed in class - that's why they are able to answer the questions.

Remember the Ant and the Grasshopper Fable, grasshopper?

14. Originally Posted by quzah
Stop trying to play the martyr. You've "see[n] the error in [your] ways"? Really? Here, let me quote you:

Yeah, you seem real sincere.

Quzah.
I said I wasn't trying to make you feel guilty or play the role of a martyr, I was explaining to you my situation.

So in order to refute my last post, you quote a post that I made before it? What type of sense does that make?

I know I'm damn sincere, and quoting a post before that won't change anything.

There's nothing wrong with making light of the situation. I find it funny that I had everything I wanted to learn right in front of me and threw it away...and now I want to learn it and I have to search for it.

If you choose to no longer help me man, that's fine. I appreciate the help you gave me beforehand.

But trust me when I tell you that I am here to learn.

15. Originally Posted by jim mcnamara
Beastie - most of the people who CAN answer questions stayed in class - that's why they are able to answer the questions.

Remember the Ant and the Grasshopper Fable, grasshopper?
Lol this is true.

But I'm not going to sit here and cry/regret the past...I'm going to do something about it.

I wrote the Grasshopper fable man.