如何在 Linux 系统上将我的 Windows C 程序转换为 运行?

How can I convert my Windows C program to run on a Linux system?

我想在 linux 系统上将以下程序转换为 运行 用于我的学校作业。我非常努力地挣扎,因为 linux 计算机实验室因 covid 而关闭。所以,我在我的 windows 电脑上编写作业。我今天可以访问,但由于多个错误,它没有 运行。我该怎么做才能转换我的代码以使其 linux 兼容?

#include <stdio.h>
#include <string.h>






char ch;

#define NUMROWS 6
#define NUMCOLS 6
int i, j;

char str1[42] = {'S', '#', '#', '#', '#', '#', '\n', '.', '.', '.', '.', '.', '#', '\n', '#', '.', '#', '#', '#', '#', '\n', '#', '.', '#', '#', '#', '#', '\n', '.', '.', '.', '#', '.', 'G', '\n', '#', '#', '.','.','.','#','\n'};


main()
{


    
    
    char response[10];
    char response2[10];
    char yes;
    char no;
    char ready;
    char notready;
    
    printf("Do you want to play the maze game? yes|no : \n");
    scanf("%s", &response);
    
    if (!strcmp(response, "yes"))
    {
    printf("\n");
    printf("Game will begin!");
    printf("\n");
    printf("\n");
    
    printf("Maze Board Example: \n");
    printf("S##### \n");
    printf(".....# \n");
    printf("#.#### \n");
    printf("#.#### \n");
    printf("...#.G \n");
    printf("##...# \n");
    printf("\n");
        
    printf("Intstructions:");
    printf("Are you ready to play? ready|no \n");
    scanf("%s", &response);
    
    if (!strcmp(response, "ready"))
    {
        printf("playing...");
        

        system("cls");



        while(1)
        {
            mazeGo();
        }
    }
    

    }
    
    
    
    
    
    if (!strcmp(response, "no"))
    {
        printf("\n");
        printf("Game will exit");

    }
    
    return 0;
    
    
    
    
}

    
    
void mazeGo()
{


    str1[0]= '+';
    printf("%s", str1);
    sleep(1);
    system("cls");
    str1[7] = '+';
    printf("%s", str1);
    sleep(1);
    system("cls");
    str1[8] = '+';
    printf("%s", str1);
    sleep(1);
    system("cls");
    str1[9] = '+';
    printf("%s", str1);
    sleep(1);
    system("cls");
    str1[10] = '+';
    printf("%s", str1);
    sleep(1);
    system("cls");
    str1[11] = '+';
    printf("%s", str1);
    sleep(1);
    system("cls");
    str1[15] = '+';
    printf("%s", str1);
    sleep(1);
    system("cls");
    str1[22] = '+';
    printf("%s", str1);
    sleep(1);
    system("cls");
    str1[28] = '+';
    printf("%s", str1);
    sleep(1);
    system("cls");
    str1[29] = '+';
    printf("%s", str1);
    sleep(1);
    system("cls");
    str1[30] = '+';
    printf("%s", str1);
    sleep(1);
    system("cls");
    str1[37] = '+';
    printf("%s", str1);
    sleep(1);
    system("cls");
    str1[38] = '+';
    printf("%s", str1);
    sleep(1);
    system("cls");
    str1[39] = '+';
    printf("%s", str1);
    sleep(1);
    system("cls");
    str1[32] = '+';
    printf("%s", str1);
    sleep(1);
    system("cls");
    str1[33] = '+';
    printf("%s", str1);
    sleep(1);
    system("cls");
    
    printf("\n You win!");
    
    exit(0);

}





首先,您应该将 return 类型的 void 添加到您的主函数中。

void main()...

那么您正在尝试执行“cls”命令,这在 linux 中将不起作用,因为它是一个 windows 特定命令。

我无法想象你在 Windows...

上没有收到警告
...
printf("Do you want to play the maze game? yes|no : \n");
scanf("%s", &response);
...

=> 格式“%s”需要类型为 'char ' 的参数,但参数 2 的类型为“char ()[10]

应该是scanf("%s", response);甚至更好:scanf("%9s", response);

这足以调用未定义的行为并使程序运行顺利,随时崩溃或提供不一致的输出...并且该错误在程序中重复出现...

system("cls");

=> 警告:函数的隐式声明 'system'

当然不是错误,但最佳实践建议在使用函数之前声明函数。你应该使用 #include <stdlib>

void mazeGo()

=> 警告:'mazeGo'

类型冲突

该标识符在 mazeGo(); 处首次遇到,并隐式声明为 int mazeGo()。你应该在 main

之前有一个 void mazeGo(); 声明

还有一个数字或未使用的变量。同样,这不是错误,但在代码中保留未使用的变量可能会隐藏拼写错误并使以后的维护更加困难。

除此之外,system("cls") 只会在 Windows 上清屏。在 Linux 上,由 system 启动的 shell 将抱怨未知命令,但它不应中止程序。

TL/DR:

  1. 警告不可忽视
  2. 如果程序在 Windows 上是正确的,它将在 Linux 上有 运行(屏幕清除除外)