2

我是c新手,我正在努力上网,吸收资源来帮助学习。

我从一个简单的命令提示符类型交易开始,即使这也给我带来了困难!我正在尽力学习指针,但这个想法对我来说很难掌握,所以这里是给我带来麻烦的代码。我希望这个麻烦代码的答案能帮助我了解指针的语法。

#include <stdio.h>
#include <stdlib.h>
#include "login.h"
#include "help.h"
#include <malloc.h>

main()
{
if(login())                /* Login runs fine. After the imported */ 
{                          /*login code runs, it takes me to the main screen */
    int prac;          /* (printf("Type help for a list of commands")) i input*/
    char inpt[255];    /* help, the imported help screen runs,then the core 
    int *ptr;          /*dumps. oh and i know the malloc() syntax is wront*/
    malloc(255) == ptr;   /*that's just the last thing i tried before i posted*/

    *ptr == printf("Continuing Program...\n\n");
    printf("---Type Help For a List of Commands----\n");
    gets(inpt);
    if (strcmp(inpt, help) == 1)
    {
        help();
        goto *ptr;
    }
}
return 0;
}
4

2 回答 2

4

您可能需要复习基本 C。

这是一个比较,而不是一个任务。该语句泄漏内存但没有其他影响。

malloc(255) == ptr;

这将取消引用一个未初始化的变量,并将其与printf(). 大多数人只是忽略printf(). 但是,由于ptr未初始化,这充其量只会使您的程序因分段错误而崩溃,并且可能会做一些更糟的事情。

*ptr == printf("Continuing Program...\n\n");

这会将字符串与函数进行比较。这可能不会在大多数系统上崩溃,但无论哪种方式都是错误的。

strcmp(inpt, help)

这是废话,不应该编译。你只能goto一个标签,而*ptr不是一个标签。

goto *ptr;
于 2013-04-08T02:35:24.157 回答
1

刚刚修改为做我认为你想要的,我假设你想获得帮助,然后循环并从用户那里获得另一个命令。

int prac;          
char inpt[255];    
bool quit = false;
while(!quit)
{
printf("Continuing Program...\n\n");
printf("---Type Help For a List of Commands----\n");
gets(inpt);
if (strcmp(inpt, "help") == 0)
{
    help();     
}
if (strcmp(inpt, "quit") == 0)
{
    quit = true;
}

}

指针不与 goto 一起使用,虽然在概念上与标签相似,但实际上它们在语言的工作方式方面完全不同。

于 2013-04-08T02:36:17.643 回答