c-小程序的小问题,求大神进来看看

问题描述

小程序的小问题,求大神进来看看

为什么循环的退出条件只有在单独输入EOF的时候才有效?
为什么前面输入字符再输入EOF的话会输出奇怪的东西(c is't a letter. -1)?

 //程序从标准输入读取字符,直到遇到文件结尾。程序检查并报告该字符是否是一个字母。如果是的话,程序还应该报告该字母在字母表中的位置,否则返回-1#include<stdio.h>#include<ctype.h>int main (void){    char ch = NULL;    while ((ch = getchar()) != EOF){        if (!isalpha(ch))            printf(""%c isn't a lettter. -1n"");        else{            if(isupper(ch))                printf(""%c is the %d in the alphabetn""                        ch       ch - 'A' +1);            else                printf(""%c is the %d in the alphabetn""                        ch       ch - 'a' +1);        }    }    printf(""Done.n"");    return 0;}

解决方案

getchar()在你输入几个字符后按回车才读取第一个字符,其余的字符和回车被放到缓冲区,其中ctrl+z以0x1a放入缓冲区的,
再次被getchar读入时就不是EOF了。
只有在一行的开头输入ctrl+z,其他字符+回车,才被getchar在第一次读入时,返回-1,即oxff,也就是EOF。

解决方案二:
你可以不要用getchar输入,用scanf输入试试

解决方案三:
getchar()在你输入几个字符后按回车才读取第一个字符,其余的字符和回车被放到缓冲区,其中ctrl+z以0x1a放入缓冲区的,
再次被getchar读入时就不是EOF了。
只有在一行的开头输入ctrl+z,其他字符+回车,才被getchar在第一次读入时,返回-1,即oxff,也就是EOF。

时间: 2024-11-25 17:38:00

c-小程序的小问题,求大神进来看看的相关文章

c++-一个C++小程序运行错误,求大神帮忙看看

问题描述 一个C++小程序运行错误,求大神帮忙看看 #include #include "stdafx.h" using namespace std; /* run this program using the console pauser or add your own getch, system("pause") or input loop / class cartp { public: virtual char getcar()=0; }; class BMW

后台程序调整 IT新手求大神进来帮忙

问题描述 后台程序调整 IT新手求大神进来帮忙 所属项目 口袋互联网金融项目 所属模块 后台程序调整 任务描述 个人账户--资金明细页面换成动态数据 现在的数据是写死在数据库里面的,现在经理的要求是让我把这个明细页面换成动态数据 解决方案 我靠,你这就求助,问题说明白了吗 解决方案二: 最好把原页面贴出来,然后把你要的效果说清楚 解决方案三: 现在的数据是写死在数据库里面的,现在经理的要求是让我把这个明细页面换成动态数据 解决方案四: 是不是在这页面进行可编辑的操作? 解决方案五: 你的意思是数

小程序-初学者死都看不出程序的错误,求大神看看

问题描述 初学者死都看不出程序的错误,求大神看看 //程序读取整数,直到输入0.输入终止后,报告输入的偶数(不包括0)总个数,偶数的平均值,输入的奇数总个数以及奇数的平均值 #include<stdio.h> int main (void) { int num, en, on; //num是检测输入的数,en是偶数个数,on是奇数个数 float aen = 0, aon = 0; //aen是偶数的平均值,aon是奇数的平均值 printf("Please enter your n

c语言-刚学C,编了个小程序出错了,请大神帮忙看一下。

问题描述 刚学C,编了个小程序出错了,请大神帮忙看一下. 知道长方形的长和宽,求面积和周长 #include main() { float x,y,a,b; printf ("请输入长和宽且用逗号分隔:); scanf ("%f,%f,&x,&y); a=x*y; b=(x+y)*2; printf ("面积=%f,周长=%fn",a,b); } 解决方案 错误一:include后面缺少头文件包含 错误二:printf中没有右半边的引号 错误三:sc

jdbc处理存储过程的小程序出错啦 向各位大神请教一下

问题描述 jdbc处理存储过程的小程序出错啦 向各位大神请教一下 import java.sql.*; public class TestProc { public static void main(String[] args) throws Exception{ Class.forName("oracle.jdbc.driver.OracleDriver"); Connection conn = DriverManager.getConnection( "jdbc:orac

代码-JS小测试出问题,求大神解答!

问题描述 JS小测试出问题,求大神解答! <!doctype html> <html> <head> <meta charset="utf-8"> <title>无题</title> <script type="text/javascript"> window.onload=function(){ var x=document.getElementsByName("test

网络编程 ping程序有点问题,求大神帮忙看看

问题描述 网络编程 ping程序有点问题,求大神帮忙看看 // ping.cpp : 定义控制台应用程序的入口点. #include "stdafx.h" #include #pragma comment(lib,"ws2_32") //定义ICMP首部 typedef struct icmp_hdr{ unsigned char icmp_type; //ICMP消息类型,回显请求:8,回显应答请求:0 unsigned char icmp_code; //代码,

select-SQL可以再客户端执行不能在程序中执行,求大神指点?急

问题描述 SQL可以再客户端执行不能在程序中执行,求大神指点?急 SQL如下: select distinct b.COLUMN_NAME,b.comments,a.column_id from user_tab_columns a,user_col_comments b where a.column_name=b.column_name and b.table_name=upper('YFRAME_STU') order by a.column_id; 解决方案 upper('YFRAME_S

windows-一个简单Windows程序无法链接,求大神指导,感谢

问题描述 一个简单Windows程序无法链接,求大神指导,感谢 // HelloWin.C 在客户区显示"你好 Windows 7" (c) Charles Petzold 1998 #include #pragma comment(libwinmm.lib"") LRESULT CALLBACK WinProc(HWND UINT WPARAM LPARAM); int WINAPI WinMain(HINSTANCE hInstance HINSTANCE hP