关于c语言中getchar()的问题

问题描述

关于c语言中getchar()的问题
 #include<stdio.h>
int main(void)
{
    int guess = 1;

    printf("Pick an integer from 1 to 100. I will try to guess");
    printf("it.
Respond with a y if my guess is right and with");
    printf("
an n if it is wrong.
");
    printf("Uh...is your number %d?
",guess);
    while (getchar() != 'y')
    {
        if (getchar() =='n')
        printf("Well,then,is it %d?
", ++guess);
        else
        printf("Sorry,you say what?
");
        while (getchar() !='
')
            continue;
    }
    printf("I knew I could do it!
");
    return  0;
}
 #include<stdio.h>
int main(void)
{
    int guess = 1;
    char response;

    printf("Pick an integer from 1 to 100. I will try to guess");
    printf("it.
Respond with a y if my guess is right and with");
    printf("
an n if it is wrong.
");
    printf("Uh...is your number %d?
",guess);
    while ((response = getchar()) != 'y')
    {
        if (response =='n')
        printf("Well,then,is it %d?
", ++guess);
        else
        printf("Sorry,you say what?
");
        while (getchar() !='
')
            continue;
    }
    printf("I knew I could do it!
");
    return  0;
}

为什么这两个程序的运行结果不一样呢??
为什么需要把getchar()的值赋给response?

解决方案

因为每次getchar()都是一个输入数据的动作啊!
把它赋值给response,就能暂存上一个动作的结果了~
第一个程序会造成严重的混乱。

解决方案二:

许多初学者都习惯用?char?型变量接收?getchar、getc,fgetc?等函数的返回值,其实这么做是不对的,并且隐含着足以致命的错误。getchar?等函数的返回值类型都是int?型
下面是getchar()的定义:
[html]?view?plaincopyprint?
?
1?int??
2?getchar?()??
3?{??
4???int?result;??
5?......
答案就在这里:C语言中getchar中的问题
----------------------

时间: 2024-12-10 09:26:57

关于c语言中getchar()的问题的相关文章

printf-菜鸟求解c语言中putchar和getchar的细节。

问题描述 菜鸟求解c语言中putchar和getchar的细节. # include <stdio.h> int main() { int trans(char); char c; printf("输入一串字符串进行翻译: "); c = getchar(); while(c != ' ') { c = trans(c); printf("%d", c); getchar(); } putchar(' '); return 0; } trans(char

缓存-c语言中的“Enter”键功能,求大神

问题描述 c语言中的"Enter"键功能,求大神 我想问 回车键 到底算是个什么东西???一般我们按下回车键后,键盘缓存区发生了什么???键盘缓存区是什么不是先接收到了 "进行扫描" 后将'n'输入缓存区?不然怎么老说有残留,有时还要用getchar()来进行吸收.. 解决方案 之前回答你了 这种问题根本不要问,看看源代码就知道了 http://www.cnblogs.com/cpoint/p/3373263.html scanf内部调用getc获取的字符,一上来,

有关于c语言中的getch函数

问题描述 有关于c语言中的getch函数 getch函数为什么对Ctrl或者alt之类的键没有反应??要想键盘随意按下一个键,就能进入程序,用什么函数?? 解决方案 getch是按键位分区来获取值的,就比如按下方向键会得到两个数,需要两次getch才能取完,如果有些按键是转意符,可以通过判断key键是否处于按下状态来确定. 解决方案二: getchar 函数名: getchar 功 能: 从stdio流中读字符 用 法: int getchar(void); 注解: getchar有一个int型

如何解决:输入输出-c语言中&amp;amp;#39; &amp;amp;#39;,与&amp;amp;#39; &amp;amp;#39;的区别?

问题描述 c语言中' n',与' '的区别? 今天没事写了段代码. #include main() { int c; while(c=getchar())!='n' putchar(c); } 这里只能输入输出一次,就退出循环了. 而我这样写 将while(c=getchar())!='n'改为while(c=getchar())!='' 这样就可以多次循环输入输出了而我又将上面的改为while(c=getchar())!=EOF 则不能输出了. 请问这几个是为什么? 谢谢! 解决方案 首位是n

c语言中scanf()读取值的问题

问题描述 c语言中scanf()读取值的问题 int get_int(void) { int input; char ch; while (scanf("%d", &input) != 1) { while ((ch=getchar()) != ' ') putchar(ch); printf("is not an interger. Please enter an"); printf("interger value,such as 25,-178

详解C语言中scanf函数使用的一些注意点_C 语言

 (一)基本介绍 Scanf是系统自带的函数,声明包含在stdio.h文件中,因此要是有该函数,必须加载#include<stdio.h>头文件.当执行到scanf函数时,程序就暂停等待用户输入,该函数只接受变量的地址,格式为&变量名.是一个阻塞式的函数,2用户输入完毕后,则将值赋值给变量,至此函数调用完毕.敲回车键告知计算机键入完毕. (二)使用注意 ①. 使用scanf函数输入一个字符变量.Char a; scanf("%c",&a); ②. 同时输入多

c语言-C语言中的rand()函数的问题

问题描述 C语言中的rand()函数的问题 代码如下,为什么a总是输出0,而b却能正常输出?rand()的返回值不是在0~RAND_MAX之间的整数吗? #include <stdlib.h> #include int main (void) { int a; int b; int i; for (i=0;i<5;i++) { a=10*rand()/RAND_MAX; printf ("a=%dn",a); } for (i=0;i<5;i++) { b=10

Java 语言中 Enum 类型的使用介绍

Enum 类型的介绍 枚举类型(Enumerated Type) 很早就出现在编程语言中,它被用来将一组类似 的值包含到一种类型当中.而这种枚举类型的名称则会被定义成独一无二的类型描述符,在这一点上和常量的 定义相似.不过相比较常量类型,枚举类型可以为申明的变量提供更大的取值范围. 举个例子来说明 一下,如果希望为彩虹描绘出七种颜色,你可以在 Java 程序中通过常量定义方式来实现. 清单 1. 常量定义 Public static class RainbowColor { // 红橙黄绿青蓝紫

C语言中trim的实现

本文详细介绍C语言中trim的实现 描述 自己用ATL写了个COM,不支持MFC,所以无法用CString,但支持C编码,遇到字符串(字符数组),想去掉字符串中的空格,C下没有TRIM函数,找又没找到,几行代码自己写吧.往后大家万一遇到用着也方便. 说明 1.seps是需要去除的字符数组,可以有几个字符,也可以一个.这里是空格,最常用的. 2.参数也很简单,第一个是结果数组指针,第二个是原字符数组指针,第三个是需要去掉的字符数组指针.返回的是结果数组指针. #include "stdafx.h&