2011-03-20 126 views
1

为什么下面的程序同时产生两个输出信息,而不询问用户的任何输入?任何人都可以解释这个程序的输出吗?

#include <stdio.h> 
#include <ctype.h> 

int main(void) 
{ 
    char input; 
    do { 
     printf("Enter a single character: \n"); 
    scanf("%c", &input); 
     printf("The ordinal value is %d. \n",input);  

     } while(input != '#'); 
    return 0; 
} 

输出为如下:

的,除非另行指定时间
Enter a single character: 
s 
The ordinal value is 115. 
Enter a single character: 
The ordinal value is 10. 
Enter a single character: 
+1

如果你想要健壮的基于行的用户输入,请查看http://stackoverflow.com/questions/4023895/how-to-read-string-entered-by-user-in-c/4023921#4023921 – paxdiablo 2011-03-20 01:52:22

回答

5

端子输入读取线; scanf按照指定读取一个字符,然后保留您之后键入的换行符,以便在输入缓冲区中发送该行以进行下一轮循环。考虑按行读取输入内容,并使用sscanf()或类似语言来解析这些行。

+1

+ 1,但是如果你读了一整行输入(通过'fgets'),你可以使用'buffer [0]'获得第一个字符,而不是经历'sscanf'的所有麻烦。或者,因为我们只需要单个字符,所以我们可以使用'fgetc' /'getc' /'getchar'。 – 2011-03-20 01:37:21

+0

难道你不能只使用scanf(“%c \ n”,&输入)? (请注意\ n) – quasiverse 2011-03-20 02:14:21

0

只需插入getchar();在您致电scanf后。这将吃掉换行符。建议使用scanf(“%c \ n”,&输入);听起来很合理,但我从来没有发现它运作良好;我想知道有人能告诉我为什么吗?

相关问题