{"id":458,"date":"2009-01-19T17:06:53","date_gmt":"2009-01-19T16:06:53","guid":{"rendered":"http:\/\/www.tiendadeultramarinos.es\/?p=458"},"modified":"2010-08-26T20:19:36","modified_gmt":"2010-08-26T18:19:36","slug":"gotoxyxy-y-clrscr-de-c-sobre-linux","status":"publish","type":"post","link":"https:\/\/www.tiendadeultramarinos.es\/?p=458","title":{"rendered":"gotoxy(x,y) y clrscr() de C sobre Linux"},"content":{"rendered":"<p>Se me hab\u00eda ocurrido compilar algunos de los programitas que hice hace dos o tres a\u00f1os en C en Windows y claro, ahora en Linux daban algunos fallos por librer\u00edas y funciones utilizadas. Lo normal.<\/p>\n<p>Sin embargo, me ha llamado la atenci\u00f3n de que no funcionaran ni <em>gotoxy(x,y)<\/em>, ni <em>clrscr()<\/em>. La primera para ir a unas coordenadas de la pantalla para poder escribir a continuaci\u00f3n all\u00ed, en lugar de l\u00ednea a l\u00ednea, y la segunda para limpiar toda la pantalla. Y da la casualidad de que ayer me aburr\u00eda y me apeteci\u00f3 programarme un <a href=\"http:\/\/es.wikipedia.org\/wiki\/Juego_de_la_vida\">Juego de la Vida de Conway<\/a>, de modo que necesitaba una funci\u00f3n que sustituyese al <em>gotoxy(x,y)<\/em>.<\/p><a name=\"teMiddle1117593058\"><\/a><div class=\"te_div\" id=\"te1117593058\">\n<p>As\u00ed pues he intentado mirar en alg\u00fan manual y luego he googleado un poco. Parece ser que estas dos funciones s\u00f3lo est\u00e1n en librer\u00edas del DOS, y que no hay equivalente en librer\u00edas existentes en Linux. Hay bastantes hilos en foros de gente preguntando por eso mismo, y en algunos la soluci\u00f3n que dan es definir esas funciones en tu propio c\u00f3digo. Por supuesto, acompa\u00f1an el c\u00f3digo.<\/p>\n<p>El <em>clrscr() <\/em>no puede ser m\u00e1s simple: un bucle con tantos intros como desees, unos 50 ser\u00e1n m\u00e1s que suficientes, aunque todo depende del tama\u00f1o de la ventana. \u00bfPara qu\u00e9 complicarse m\u00e1s la vida?<\/p>\n<p>Para el <em>gotoxy(x,y)<\/em> ya es necesaria una <a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/h21280bw(VS.80).aspx\">secuencia de escape<\/a>, la <strong>\\033<\/strong>:<\/p>\n<blockquote><p>Escape sequences allow you to send nongraphic control characters to a display device. For example, the ESC character (<strong>\\033<\/strong>) is often used as the first character of a control command for a terminal or printer. Some escape sequences are device-specific. For instance, the vertical-tab and formfeed escape sequences (<strong>\\v<\/strong> and <strong>\\f<\/strong>) do not affect screen output, but they do perform appropriate printer operations.<\/p><\/blockquote>\n<p>He encontrado el c\u00f3digo para la funci\u00f3n <em>gotoxy(x,y)<\/em> en dos sitios, uno <a href=\"http:\/\/www.daniweb.com\/code\/snippet216326.html\">m\u00e1s largo<\/a> y otro <a href=\"http:\/\/bytes.com\/topic\/c\/answers\/548109-whats-substitute-gotoxy-c-c-linux-platform\">m\u00e1s reducido<\/a>. He comprobado que funcionan ambas. Copio aqu\u00ed el reducido:<\/p>\n<blockquote><p><code>#define MAX_SCREEN_AREA 100<br \/>\nint gotoxy(int x, int y){<br \/>\nchar essq[MAX_SCREEN_AREA]={0}; \/\/ String variable to hold the escape sequence<br \/>\nsprintf(essq, \"\\033[%d;%df\", y,x);<br \/>\nprintf(\"%s\", essq);<br \/>\nreturn 0;<br \/>\n}<\/code><\/p><\/blockquote>\n<p>De todas formas, he descubierto que no es necesaria tanta l\u00ednea. Analizando el c\u00f3digo que visto c\u00f3mo funcionaba y he probado a incluir la secuencia de escape directamente en un <em>printf() <\/em>y, voil\u00e1, funciona. Supongo queir\u00e1 tambi\u00e9n con <em>scanf()<\/em> y otros.<\/p>\n<p><code>printf(\"\\033[9;9f asdf\\n\");<\/code><\/p>\n<\/div><p style=\"text-align: center;\"><a style=\"display:none;\" class=\"theTag\" id=\"te1117593058\" onClick=\"expand('#te1117593058');\" href=\"#teMiddle1117593058\"><\/a><\/p><script language=\"JavaScript\" type=\"text\/javascript\">expander_hide('#te1117593058');<\/script>","protected":false},"excerpt":{"rendered":"<p>Se me hab\u00eda ocurrido compilar algunos de los programitas que hice hace dos o tres a\u00f1os en C en Windows y claro, ahora en Linux daban algunos fallos por librer\u00edas y funciones utilizadas. Lo normal. Sin embargo, me ha llamado la atenci\u00f3n de que no funcionaran ni gotoxy(x,y), ni clrscr(). La primera para ir a &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/www.tiendadeultramarinos.es\/?p=458\" class=\"more-link\">Seguir leyendo<span class=\"screen-reader-text\"> \u00abgotoxy(x,y) y clrscr() de C sobre Linux\u00bb<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[447,297,53],"class_list":["post-458","post","type-post","status-publish","format-standard","hentry","category-informatica","tag-c","tag-linux","tag-programacion","entry"],"_links":{"self":[{"href":"https:\/\/www.tiendadeultramarinos.es\/index.php?rest_route=\/wp\/v2\/posts\/458","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.tiendadeultramarinos.es\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tiendadeultramarinos.es\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tiendadeultramarinos.es\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tiendadeultramarinos.es\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=458"}],"version-history":[{"count":1,"href":"https:\/\/www.tiendadeultramarinos.es\/index.php?rest_route=\/wp\/v2\/posts\/458\/revisions"}],"predecessor-version":[{"id":1650,"href":"https:\/\/www.tiendadeultramarinos.es\/index.php?rest_route=\/wp\/v2\/posts\/458\/revisions\/1650"}],"wp:attachment":[{"href":"https:\/\/www.tiendadeultramarinos.es\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=458"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tiendadeultramarinos.es\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=458"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tiendadeultramarinos.es\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=458"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}