Как перенести код с помощью Windows conio.h на Linux? - PullRequest
2 голосов
/ 06 ноября 2011

Я написал эту программу на C для компилятора Win32 / c, но, хотя я пытаюсь запустить ее, используя gcc на машине Linux или codepad.org, он показывает «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();
}

Ответы [ 3 ]

3 голосов
/ 06 ноября 2011

Похоже, что единственными функциями, которые вы используете из conio.h, являются clrscr() и getch().Просто уберите их, и у вас все будет хорошо - они не влияют на работу программы.Они используются здесь больше как обходные пути для поведения оконного терминала.

Пара замечаний:

  1. main() должно вернуть int.
  2. strlen() определено в string.h - вы, вероятно, захотите включить это.
2 голосов
/ 06 ноября 2011

Рассматривая ваш вопрос, я вижу, что для clrscr () и getch () вы используете conio.h Но этот заголовок недоступен в gcc.Так что для clrscr используйте

system("clear");

и, как вы упомянули для getch (), используйте библиотеку curses

Cheers !!

0 голосов
/ 06 ноября 2011

Я не посмотрел на ваш код, чтобы узнать, нужны ли ему три функции. Но это самый простой способ получить их. Обычно есть лучший способ, чем использовать 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 ()

...