如何使用 Windows conio.h 将代码移植到 Linux?

发布于 2024-12-14 07:29:40 字数 817 浏览 1 评论 0原文

我为 Win32/c 编译器编写了这个 C 程序,但是当我尝试在 Linux 机器或 codepad.org 中使用 gcc 运行它时,它显示“conio.h:没有这样的文件或目录编译终止”要执行哪些修改该程序不包含任何其他新包含项,例如curses.h

#include<stdio.h>
#include<conio.h>
void main()
  {
   int i=0,j=0,k=0,n,u=0;
   char s[100],c2,c[10];
   char c1[3]={'a','b','c'};
   clrscr();
   printf("no of test cases:");
   scanf("%d",&n);
  for(u=0;u<n;u++)
    {
 printf("Enter the string:");
 scanf("%s",s);
  i=0;
 while(s[i]!='\0')
  {
     if(s[i+1]=='\0')
         break;
     if(s[i]!=s[i+1])
     {
      for(j=0;j<3;j++)
       {
    if((s[i]!=c1[j])&&(s[i+1]!=c1[j]))
    {
      c2=c1[j];
     }
}
    s[i]=c2;

  for(k=i+1;k<100;k++)
    {
 s[k]=s[k+1];
}
  i=0;
  }
  else
  i++;
}
c[u]=strlen(s);

}
for(u=0;u<n;u++)
printf("%d\n",c[u]);
 getch();
}

I wrote this C program for Win32/c compiler but while i'm trying run this using gcc in Linux machine or codepad.org it shows 'conio.h: No such file or directory compilation terminated' What are modification to be done to execute this program without including any other new includes like curses.h

#include<stdio.h>
#include<conio.h>
void main()
  {
   int i=0,j=0,k=0,n,u=0;
   char s[100],c2,c[10];
   char c1[3]={'a','b','c'};
   clrscr();
   printf("no of test cases:");
   scanf("%d",&n);
  for(u=0;u<n;u++)
    {
 printf("Enter the string:");
 scanf("%s",s);
  i=0;
 while(s[i]!='\0')
  {
     if(s[i+1]=='\0')
         break;
     if(s[i]!=s[i+1])
     {
      for(j=0;j<3;j++)
       {
    if((s[i]!=c1[j])&&(s[i+1]!=c1[j]))
    {
      c2=c1[j];
     }
}
    s[i]=c2;

  for(k=i+1;k<100;k++)
    {
 s[k]=s[k+1];
}
  i=0;
  }
  else
  i++;
}
c[u]=strlen(s);

}
for(u=0;u<n;u++)
printf("%d\n",c[u]);
 getch();
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

恬淡成诗 2024-12-21 07:29:41

我没有看你的代码来看看它是否需要这三个函数。但这是获取它们的最简单方法。通常有比使用 getch() 更好的方法。当你清除我的屏幕时,clrscr() 也没有什么乐趣!

#include<stdio.h>
#include <stdlib.h>  // system
#include <string.h>  // strlen
#include <termios.h> // getch
#include <unistd.h>  // getch

void clrscr()
{ 
  // Works on systems that have clear installed in PATH
  // I don't like people clearing my screen though
  system("clear");
}


int getch( ) 
{
  struct termios oldt, newt;
  int ch;

  tcgetattr( STDIN_FILENO, &oldt );
  newt = oldt;
  newt.c_lflag &= ~( ICANON | ECHO );
  tcsetattr( STDIN_FILENO, TCSANOW, &newt );
  ch = getchar();
  tcsetattr( STDIN_FILENO, TCSANOW, &oldt );
  return ch;
}

getch()

I did not look at your code to see if it needs the three functions. But this is the simplist way to get them. There is normaly a better way than using getch(). clrscr() is also no fun when you clear my screen !

#include<stdio.h>
#include <stdlib.h>  // system
#include <string.h>  // strlen
#include <termios.h> // getch
#include <unistd.h>  // getch

void clrscr()
{ 
  // Works on systems that have clear installed in PATH
  // I don't like people clearing my screen though
  system("clear");
}


int getch( ) 
{
  struct termios oldt, newt;
  int ch;

  tcgetattr( STDIN_FILENO, &oldt );
  newt = oldt;
  newt.c_lflag &= ~( ICANON | ECHO );
  tcsetattr( STDIN_FILENO, TCSANOW, &newt );
  ch = getchar();
  tcsetattr( STDIN_FILENO, TCSANOW, &oldt );
  return ch;
}

getch()

抚笙 2024-12-21 07:29:40

看起来您在 conio.h 中使用的唯一函数是 clrscr()getch()。只要把它们拿出来就应该没问题——它们似乎不会影响程序的运行。它们在这里的使用更像是 Windows 终端行为的解决方法。

一些注意事项:

  1. main() 应该返回 int
  2. strlen()string.h 中定义 - 您可能需要包含它。

It looks like the only functions you're using from conio.h are clrscr() and getch(). Just take those out and you should be fine - they don't appear to affect the operation of the program. They're being used here more like workarounds for windows terminal behaviour.

A couple of notes:

  1. main() should return int.
  2. strlen() is defined in string.h - you'll probably want to include that.
行雁书 2024-12-21 07:29:40

回顾你的问题,我可以看到对于 clrscr() 和 getch() 你正在使用 conio.h 但这个头在 gcc 中不可用。因此,对于 clrscr 的使用

system("clear");

以及您提到的 getch() ,请使用curses库

干杯!

Reviewing your question I can see that for clrscr() and getch() you are using conio.h But this header is not available in gcc. So for clrscr use

system("clear");

and as you have mentioned for getch() use the curses library

Cheers !!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文