c-如何控制fileno的输出



我面临一段我不理解的代码:

read(fileno(stdin),&i,1);
switch(i)
{
case 'n':
printf("a");
break;
....

我知道fileno在这里返回和sdtin相关联的文件描述符,然后read将这个值放在i变量中。

那么,stdin的值应该是多少才能使i与第一个"情况"(即n)匹配?

谢谢

但是stdin的值应该是多少才能与第一个"case"匹配,即\n?

case语句不查看stdin的"值"。

read(fileno(stdin),&i,1);

i中读取一个字节(假设read()调用成功),如果该字节是n(换行符),则它将匹配大小写。您可能需要阅读read(2)的手册页才能了解它的作用。

我知道fileno在这里返回与sdtin相关的文件描述符,

是的,不过我怀疑你不知道这意味着什么。

read将该值放入i变量中。

否。否否否。read()不会将文件描述符的值或其任何部分放入所提供的缓冲区(在您的情况下,是i的字节)。顾名思义,read()尝试读取文件,该文件由作为其第一个参数传递的文件描述符表示。读取的字节(如果有的话)存储在提供的缓冲区中。

stdin表示程序的标准输入。如果你从一个交互式shell运行程序,它将与你的键盘相对应。该程序尝试读取用户输入,并将其与换行符进行比较。

这个程序可能有缺陷,甚至可能是完全错误的,尽管仅仅从呈现的片段是不可能分辨出来的。如果iint类型的变量,那么它的表示形式大于一个字节,但您只向其中读取了一个字节。这将只替换表示形式的一个字节;结果取决于C实现和读取的数据。

程序试图做的事情可以使用read(),但我建议使用getchar()

#include <stdio.h>
/*
...
int i;
...
*/
i = getchar();
/* ... */

相关内容

  • 没有找到相关文章

最新更新