如果我们不存储输入字符怎么办?

时间:2014-02-16 17:45:21

标签: c input getchar

#include <stdio.h>
int main(void)
{ 
    getchar();
    return 0;
}

在上面的示例代码中,如果用户输入了一个字符,那么它会发生什么 它会被放置在某个存储位置吗?

3 个答案:

答案 0 :(得分:3)

阅读后肯定会将其丢弃

让我们用一个简单的例子来理解它

int i = 1;
i++;

实际上第二个陈述会做什么。当它执行时,i的值从内存中获取,但是没有其他变量可以赋值,并且它被丢弃,并且增量可以在前一个和下一个序列点之间的任何时间发生。
类似地,getchar();将读取一个字符,但它将被丢弃,因为没有将此值分配给任何内存位置。

答案 1 :(得分:3)

从技术上讲,可能会发生的是字符代码将被getchar函数放入处理器寄存器中。通常,调用代码会将其复制到内存位置,但在您的示例中,它不会存储在内存中的任何位置(应该去哪里)。然后,不久之后,处理器寄存器将被其他一些数据覆盖。

因此,该值将被丢弃。

答案 2 :(得分:0)

很多可能会在幕后发生。

由于getchar()是标准C标准I / O函数,因此很可能从缓冲流中读取。这意味着

  • 将填充缓冲区(stdin默认为行缓冲)
  • 将初始化流索引并可能增加
  • 字符值将被放置在寄存器中,或者可能不会。 C编译器优化器的范围从愚蠢到智能。
  • stdio库可能执行的其他操作,但我们只能推测这些操作,因为它们不会以可检测的方式影响您的程序

简而言之,对函数返回值不执行任何操作都是完全理智的。它没有副作用。 C语言甚至提供(void)强制转换来明确说明这种意图。