我无法在Linux中找到conio.h的等效头文件.
在Linux中有getch()&getche()function功能吗?
我想制作一个开关盒基本菜单,用户只需按一个键即可提供选项,并且应该向前移动过程.按下他的选择后,我不想让用户按ENTER键.
在任何地方我都看到"它实际上是相同的"或类似的东西......
来自GNU C编程教程:
GNU C库中还有另一个名为fgetc的函数.它在大多数方面与getc相同,除了getc通常作为宏函数实现并且高度优化,因此在大多数情况下是优选的.(在您从标准输入读取的情况下,getc与fgetc一样快,因为与计算机读取输入的速度相比,人类输入速度较慢,但是当您从不是由人工交互生成的流中读取时, fgetc可能更好.)
还有什么区别?我听说他们每个都有不同的实现(一个可以用作宏),但是,是什么让它们与标准C库(或规范)中的它们完全不同(或不同)?
以下三个功能:
getc getchar&scanf
从stdin读取角色的最佳选择是什么?为什么?
这些功能中是否存在任何已知的缺点或限制,这使得一个功能优于另一个功能?
我正在写一个基本上等待用户点击"输入"然后做某事的功能.我发现在测试时有效的方法如下:
#include <stdio.h>
int main()
{
        int x = getc(stdin);
        if (x == '\n') {
                printf("carriage return");
                printf("\n");
        }
        else {
                printf("missed it");
                printf("\n");
        }
}
我的问题,以及我最初尝试过的是:if (x == '\r')但是在测试中,该程序没有让我碰到输入.这'\n'似乎对应于我从控制台进入输入.有人可以解释这个区别吗?另外,要验证,写它if... == "\n"是否意味着字符串文字?即用户真的必须"\n"从控制台进入,对吗?
我正在使用Perl 6模块Term :: termios.
#!/usr/bin/env perl6
use v6;
use Term::termios;
my $saved_termios := Term::termios.new(fd => 1).getattr;
my $termios := Term::termios.new(fd => 1).getattr;
$termios.makeraw;
$termios.setattr(:DRAIN);
loop {
   my $c = $*IN.getc;
   print "got: " ~ $c.ord ~ "\r\n";
   last if $c eq 'q';
}
$saved_termios.setattr(:DRAIN);
当我运行此脚本,按键up-arrow,down-arrow,right-arrow,left-arrow和q这是输出:
#after arrow-up:
got: 27
got: 91
#after arrow-down:
got: 65
got: 27
got: 91
#after arrow-right:
got: 66
got: 27
got: 91
#after …在K&R第8章中,它具有putc和getc函数的自定义实现.在getc的第一个定义中,如果参数是stdin,根据_iob的定义,函数将尝试写入地址0,因为这是_iob [0] .ptr和_iob [0] .base的值.分配.这合法吗?
_iob的定义:
FILE _iob[20] = {
 {0, (char *) 0, (char *) 0, _READ, 0},
 {0, (char *) 0, (char *) 0, _WRITE, 0},
 {0, (char *) 0, (char *) 0, _WRITE, 0}
};
为什么以下程序没有按预期打印新创建的文本文件("E")的第一个字符?这是一个简单的程序,我试图从各个方面看问题,但找不到原因.文本文件正在我的D盘上创建,内容为" EFGHI ",但由于某种原因,即使我使用倒带和读取并且输出为-1,也不会读取"E".getc()
#include<stdio.h>
#include<stdlib.h>
int main()
{
    int x;
    FILE *fp;
    fp=fopen("F:\\demo.txt","w");
    if(fp==NULL)
        puts("Write error");
    fputs("EFGHI",fp);
    rewind(fp);
    x=getc(fp);
    printf("%d",x);
    fclose(fp);
}
更新:
    #include<stdio.h>
    #include<stdlib.h>
    int main()
    {
        int x;
        FILE *fp;
        fp=fopen("F:\\demo.txt","w+");
        if(fp==NULL)
        {
            puts("Write error");
            exit(EXIT_SUCCESS);
        }
        fputs("EFGHI",fp);
        rewind(fp);
        while(!feof(fp))
        {
            x=getc(fp);
            printf("%d\n",x);
        }
        fclose(fp);
     }
似乎Ruby IO#getc在返回字符之前等到接收到\n.
如果您尝试运行此脚本:
STDOUT.sync = true
STDIN.sync = true
while data = STDIN.getc
  STDOUT.puts "Char arrived"
end
每个发送到stdin的char都会返回一个"Char arrival",但只有在发送了\n之后才会返回.
即使我写STDIN.sync = true,似乎所有char都被缓冲.
在将字符发送到STDIN之后,有没有人知道如何使脚本打印"Char到达"?
有以下功能:
void readAndPrint(FILE * f) {
    int c;
    while(c = fgetc(f) != EOF) {
        printf("%d", c);
    }
}
在main()体中我使用以下代码来使用上面的函数:
FILE * pFile;
pFile=fopen ("myfile.txt","r");
readAndPrint(pFile)
;
无论我放入myfile.txt,程序都打印出来.例如,对于abc,打印出111.
我知道函数中的c应该声明为int以正确地将它与EOF进行比较.另外,我希望打印出来自文本文件中每个字符的ASCII集的int代码(97表示a,...).我无法弄清楚为什么它会打印出"那些"...你知道原因吗?先感谢您.
我正在学习 C 中的函数与类函数宏。
在阅读 C 标准时,我发现了这一点:
通过将函数名称括在括号中,可以在本地抑制函数的任何宏定义,因为该名称后面不会跟着指示宏函数名称扩展的左括号。出于相同的语法原因,允许获取库函数的地址,即使它也被定义为宏。185)使用
#undef删除任何宏定义也将确保引用实际函数。
因此,根据此,如果我想确保 get 将是我的代码中的函数,我必须访问头<stdio.h>文件并将(我不知道是函数名称还是宏名称)括在括号或#undef宏中?
我的意思是这个:(int (getc)(FILE *stream);或者这个?#define (getc)(...) )
或者这个:
#undef getc
但这一切都在<stdio.h>文件里吗?
或者在我的代码里面?
你能给我一个关于如何确保getc在 C 中使用 as 函数的例子吗?