-1

I am trying recreate a sample LC-3 simulator as an assignment, and part of that is to have a 4 digit integer. My code is as follows:

while (read_success != NULL && !done) {
            // If the line of input begins with an integer, treat
            // it as the memory value to read in.  Ignore junk
            // after the number and ignore blank lines and lines
            // that don't begin with a number.
            //
            words_read = sscanf(buffer, "%04d", &value_read);


            // if an integer was actually read in, then
            // set memory value at current location to
            // value_read and increment location.  Exceptions: If
            // loc is out of range, complain and quit the loop. If
            // value_read is outside -9999...9999, then it's a
            // sentinel -- we should say so and quit the loop.
            if (value_read < -9999 || value_read > 9999)
            {
                printf("Sentinel read in place of Memory location %d: quitting loop\n", loc);
                break;
            }
            else if (value_read >= -9999 && value_read <= 9999)
            {
                cpu -> mem[loc] = value_read;
                printf("Memory location: %02d set to %04d \n", loc, value_read);
                cpu -> count++;
                loc++;
                value_read = NULL;
            }
            if (loc > 99)
            {
                printf("Reached Memory limit, quitting loop.\n", loc);
                break;
            }
            read_success = fgets(buffer, DATA_BUFFER_LEN, datafile);
            // Gets next line and continues the loop

    }
    fclose(datafile);

I am reading values from an sdc file with the following values: 1234 3456 -4567; 2353 3434 654 0345 7655 555 9999 10000

The problem is that 0345 shows up as 345, i want 645 to be 0645, and so on. I tried formatting %d based on a post I saw related to this, but it is not working. Any professional insight?

Edit: I did use %04d to start, but that did not work.

1 Answers1

3

If you want leading zeros to be displayed, use %04d in your printf format.

The 0 is a flag used with d (among others) that says to pad on the left with zeros.

dbush
  • 205,898
  • 23
  • 218
  • 273