2011-09-19 172 views
3

我正在经历此程序读取整数输入时:意外的putchar输出与的getchar

#include<stdio.h> 

main() 
{ 
int c; 

c = getchar(); 

while(c != EOF) { 
    putchar(c); 
    c = getchar(); 
    } 
} 

由于变量c是整数,它应存储整数等效值对于给定的输入。输出显示'a'打印为'a','b''b''c''c'但是,当我输入价格65时,输出也是65!因此,值65和char 'a'

的存储格式必须存在差异。两个值如何相互区分?

+0

是的,当你按'6'和'5'时,输出将是“65”。如果你想看到积分值,那么使用printf(“%d”,c); –

+0

尝试在'putchar(c)'之后为整个小图添加'putchar('\ n')' –

回答

2

这是因为输入65被视为两个不同的字符输入,并且程序正在按顺序打印它们。

当你输入6时,程序立即读取它并检查它不是EOF,所以它将它打印到控制台。然后当你输入5时,它再次将其作为输入。由于这也不是EOF,您的程序再次打印它。

因此,您输入了两个字符,并且该程序正确地将其正确地打印到控制台,就像它应该这样做。除此之外,没有歧视。 a的整数相当于是65,那么它会打印65如果打印这样的字符 -

char c = 'a'; 
printf("%d", c); // will print 65 

,这将打印a -

int i = 65; 
printf("%c", i); // will print a 
1

执行代码完全一样写的,但是,混淆在于你对该计划的投入的理解。

当您键入65时,它被解释为两个输入字符,即'6''5'。正如你所指出的那样,每当在while循环中调用putchar(c)时,这就是回显到控制台的内容。

1

不,65和'a'的存储没有区别。将其中的任何一个赋值给一个变量都会得到完全相同的结果。差异只与char的输入和输出有关。例如。 printf(“%c”,65)产生'a',因为这是printf()定义的一部分。对于您提到的其他两种功能,putchar()getchar()也是如此。