我面临一段我不理解的代码:
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运行程序,它将与你的键盘相对应。该程序尝试读取用户输入,并将其与换行符进行比较。
这个程序可能有缺陷,甚至可能是完全错误的,尽管仅仅从呈现的片段是不可能分辨出来的。如果i
是int
类型的变量,那么它的表示形式大于一个字节,但您只向其中读取了一个字节。这将只替换表示形式的一个字节;结果取决于C实现和读取的数据。
程序试图做的事情可以使用read()
,但我建议使用getchar()
:
#include <stdio.h>
/*
...
int i;
...
*/
i = getchar();
/* ... */