繁体   English   中英

C编程scanf协助

[英]C programming scanf assistance

我试图建立类的表单/ GPA计算器,但进入的使用scanf函数类的量时,输出为6487576不管是什么我进入。

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;
}

请帮助!

当将%iscanf() ,它还可以让您输入十六进制和八进制数字(这不是此处说明的问题)。 但是,在使用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;

printf("You Have Entered %i Classes!\\n", &c)输出变量c的地址(&c占用地址),即,输出存储单元的编号。 由于要传递变量的值,因此不应使用取变量&地址的运算符。

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

这里有两个问题。 首先,您需要包括以下标题:

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

如果不包括这些头文件,则编译器将不知道如何执行它们或它们的确切格式。 当您尝试编译时,警告将无济于事。 有一些很好的网站可以做到这一点; 只需在Google中搜索“ c exit()”之类的内容,它就会告诉您将来需要哪些标头。 编译此代码时,我使用了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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM