Помощь в программировании на С - PullRequest
0 голосов
/ 13 марта 2019

Я пытаюсь построить калькулятор формы / gpa для класса, но при вводе количества классов с помощью scanf вывод составляет 6 487 576 независимо от того, что я ввожу.

int main()
{
    int opt;
    int c;




    printf("*******************************\n");
    printf("** Fanshawe Grade Calculator **\n");
    printf("*******************************\n");

    printf("Please Choose an Option:\n");
    printf("[1] Enter Your Marks\n");
    printf("[2] Quit\n");

    scanf("%d", &opt);

    switch(opt) {
      case 1 :
         printf("********************************************************\n");
         printf("** Enter Your Marks For Your Courses (Up to 10 Only): **\n");
         printf("********************************************************\n");

         scanf("%i", &c);
         printf("You Have Entered %i Classes!\n", &c);

         /*int i;
         for(i=1;i=c;i++) {
            printf("Enter Your Mark for Class #%i\n", &i);
         }*/

         break;

      case 2 :
         printf("GoodBye!");
         exit(0);
         break;
   }
    return 0;
}

Помогите пожалуйста!

Ответы [ 3 ]

1 голос
/ 13 марта 2019

printf("You Have Entered %i Classes!\n", &c) выводит адрес переменной c (& c принимает адрес), то есть выводит номер ячейки памяти. Поскольку вы хотите передать значение переменной, вы не должны использовать оператор получения адреса переменной &.

printf("You Have Entered %i Classes!\n", c);
1 голос
/ 13 марта 2019

Здесь есть две проблемы. Во-первых, вам нужно включить следующие заголовки:

#include <stdio.h>    // declares functions like printf and scanf
#include <stdlib.h>   // declares functions like exit

Если вы не включите эти заголовки, то компилятор не знает, как их выполнять или их точные форматы. Когда вы пытаетесь скомпилировать, предупреждения не будут полезны. Для этого есть несколько хороших сайтов; просто найдите что-то вроде "c exit ()" в Google, и он скажет вам, какие заголовки вам понадобятся в будущем. Когда я компилировал этот код, я использовал gcc main.c -Wall, что заставляет отображать все предупреждения.

Во-вторых, вы используете адрес c в обоих случаях. Когда вы печатаете значение c, вы фактически печатаете адрес c, а не значение. scanf() принимает адрес (а) переменных для хранения значений, но printf() принимает сами переменные. Код должен выглядеть примерно так:

scanf("%i", &c);
printf("You Have Entered %i Classes!\n", c);

Это также всегда хорошая идея инициализировать ваши переменные. Таким образом, вы знаете, когда что-то назначено неправильно или не назначено вообще. Я забыл назначить свои переменные на некоторое время, и при компиляции на другой машине это не сработало. Это потому, что разные машины будут инициализировать переменные по-разному. Просто измените код на следующий:

int opt = 0;
int c = 0;
1 голос
/ 13 марта 2019

Когда вы используете %i с scanf(), это может позволить вам также вводить шестнадцатеричные и восьмеричные числа (это не проблема, как объяснено здесь ).Тем не менее, вы не должны использовать & при использовании printf(), поскольку он будет отображать расположение переменной в памяти вместо значения, хранящегося в ней.

Попробуйте это:

case 1 :
         printf("********************************************************\n");
         printf("** Enter Your Marks For Your Courses (Up to 10 Only): **\n");
         printf("********************************************************\n");

         scanf("%d", &c);
         printf("You Have Entered %d Classes!\n", c);
         break;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...