1

I want to read 15 numbers then convert them into letters, something like: 1 = A, 2 = B, 3 = C, 4 = D... I have this structure here:

struct Num {    
    int number;
    char letter;
};

struct Num num[150];

and this to read the numbers:

void read_num() {
    int i;
    for (i = 0; i < 15; i++) {
        printf("Insert number\n");
        scanf("%d", &num[i].number);
        fflush(stdin); 
    }
}

and now I need something to convert each number into a letter, I did create a huge function with twenty five if but it doesn't seem to work. BTW I only need to go to the number 25 so its A to Y in the alphabet. The function that doesn't work is this:

void convert() {    
    int i, ii;
    for (i = 0; i < 15; i++) {
        if (num[i].number = 1){
            num[i].letter = "A";
        } else
        if (num[i].number = 2) {
            num[i].letter = "B";
        } else
        if (num[i].number = 3) {
            num[i].letter = "C";
        } else
        if (num[i].number = 4) {
            num[i].letter = "D";
        } else
        if (num[i].number = 5) {
            num[i].letter = "E";
        ...
        }
    }
}

Im using Dev C++ in windows and C programming, I know this is a noob question but help please!

Mark Cidade
  • 98,437
  • 31
  • 224
  • 236
nightk
  • 105
  • 12

2 Answers2

4

1) Don't ever use fflush(stdin), it's undefined behavior = the worst thing that can happen to you in C programming.

2) Use == for comparison, like so: if (num[i].number == 5).

3) "a" is a string literal of type const char[2]. You want a char, which is enclosed in single quotes: 'a'.

With that said, in pretty much every encoding used today, letters are arranged in lexicographic order, so you can just do num[i].letter = (char)(num[i].number + 'A' - 1), so long as you're sure num[i].number is in the range you want. If not, you will need conditionals, but it would be better style to use a switch construct, like so:

switch (num[i].number)
{
    case 1:
        num[i].letter = 'A';
    break;

    ...
}

And by the way, please don't use Dev-C++, it's outdated and no longer maintained. You can either use Code::Blocks if you want to stay with MinGW, or you could use one of the community editions of Visual C++, which are free (and can also be used to compile C code).

user4520
  • 3,401
  • 1
  • 27
  • 50
  • Its been a while since i programmed in C b4, i just notice how bad my code looks now lol, going to test it out now – nightk Jan 19 '16 at 21:41
3

You can treat char as a numeric type (where 'A' is character 65).

So 'A' = 'A' + 0, 'B' = 'A' + 1 etc.

num[i].letter = 'A' + num[i].number - 1;

(Note the use of single quotes to enclose a single char, double quotes are used for strings - of 0 or more characters)

pticawr
  • 551
  • 5
  • 8