关于ungetc的用法

丁棒儿 2014-02-11 09:57:19
代码一:
#include<iostream>
using namespace std;
int main()
{
int t;
t=getchar();
cout<<t<<endl;
ungetc(t,stdin);
cin>>t;
cout<<t<<endl;
}

输入123
输出1
输出123

代码二:
#include<iostream>
using namespace std;
int main()
{
char t;
t=getchar();
cout<<t<<endl;
ungetc(t,stdin);
cin>>t;
cout<<t<<endl;
}

输入123
输出1
输出1

ungetc的基本用法是:
函数名: ungetc  
功 能: 把一个字符退回到输入流中 
用 法: int ungetc(char c, FILE *stream);  
输入参数:c 要写入的字符,stream 文件流指针  
输出参数:字符c - 操作成功,EOF - 操作失败 
代码一和二的区别在于一个是int型,而一个是char型,为什么输出差别这么大呢?
...全文
442 16 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
丁棒儿 2014-02-11
  • 打赏
  • 举报
回复
引用 5 楼 zhao4zhong1 的回复:
计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构…… 对学习编程者的忠告: 眼过千遍不如手过一遍! 书看千行不如手敲一行! 手敲千行不如单步一行! 单步源代码千行不如单步对应汇编一行! 单步类的实例“构造”或“复制”或“作为函数参数”或“作为函数返回值返回”或“参加各种运算”或“退出作用域”的语句对应的汇编代码几步后,就会来到该类的“构造函数”或“复制构造函数”或“运算符重载”或“析构函数”对应的C/C++源代码处。 VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化,这样过一遍不就啥都明白了吗。 对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。 (Turbo C或Borland C用Turbo Debugger调试,Linux或Unix下用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)
您说的真好,但是这个跟我的问题无关……
丁棒儿 2014-02-11
  • 打赏
  • 举报
回复
引用 4 楼 truelance 的回复:
cin >> t; 当t时int和char时的处理不同, 其他都是相同的
具体是怎么个不同法呢?
赵4老师 2014-02-11
  • 打赏
  • 举报
回复
计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构…… 对学习编程者的忠告: 眼过千遍不如手过一遍! 书看千行不如手敲一行! 手敲千行不如单步一行! 单步源代码千行不如单步对应汇编一行! 单步类的实例“构造”或“复制”或“作为函数参数”或“作为函数返回值返回”或“参加各种运算”或“退出作用域”的语句对应的汇编代码几步后,就会来到该类的“构造函数”或“复制构造函数”或“运算符重载”或“析构函数”对应的C/C++源代码处。 VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化,这样过一遍不就啥都明白了吗。 对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。 (Turbo C或Borland C用Turbo Debugger调试,Linux或Unix下用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)
熊熊大叔 2014-02-11
  • 打赏
  • 举报
回复
cin >> t; 当t时int和char时的处理不同, 其他都是相同的
丁棒儿 2014-02-11
  • 打赏
  • 举报
回复
cin>>t; 从缓冲区中获取了123,然后转化为数字赋给了t; 这并不是强制类型转换,那是怎么做的呢? 是不是atoi呢?
zhuobattle 2014-02-11
  • 打赏
  • 举报
回复
几个问题: 1. getchar其实得到的是一个字符,第二段代码,cin输出时其实是字符'1',而非int 1 2. 代码getchar只是获取一个字符输入也就是‘1’,而你本身用getchar获取一个int的输入 不是很合理。
丁棒儿 2014-02-11
  • 打赏
  • 举报
回复
自己给自己顶一下,先~
幻夢之葉 2014-02-11
  • 打赏
  • 举报
回复
引用 11 楼 QianShouYuZhiBo 的回复:
[quote=引用 8 楼 truelance 的回复:] [quote=引用 6 楼 QianShouYuZhiBo 的回复:] [quote=引用 4 楼 truelance 的回复:] cin >> t; 当t时int和char时的处理不同, 其他都是相同的
具体是怎么个不同法呢?[/quote] t是char时, cin >> t; 读入一个字符 t是int时, cin >>t; 依次读入所有0~9的字符,并得到一个整数值[/quote] 可是代码二中的缓冲区中的是char呀,怎么当成int输入了[/quote] 输入的就是char = ’1‘ 不是int数
幻夢之葉 2014-02-11
  • 打赏
  • 举报
回复
就是前面造就后面的输出啊 在程序2中: 1也是ascii里面的一个字符,这里是字符'1'(对应49)而不是整形数1,了解?

char t;
    t=getchar();
    cout<<t<<endl;
    ungetc(t,stdin);
    cin>>t;
    cout<<int(t)<<endl;//输出49  
丁棒儿 2014-02-11
  • 打赏
  • 举报
回复
引用 13 楼 jianwen0529 的回复:
这与ungetc没什么关系吧?! 一个int可以接受一个int的数(123) char一次只能接受一个字符(第一次接收的是字符1) 这就是两段代码的区别
t最后的结果才是重点
幻夢之葉 2014-02-11
  • 打赏
  • 举报
回复
这与ungetc没什么关系吧?! 一个int可以接受一个int的数(123) char一次只能接受一个字符(第一次接收的是字符1) 这就是两段代码的区别
熊熊大叔 2014-02-11
  • 打赏
  • 举报
回复
引用 11 楼 QianShouYuZhiBo 的回复:
可是代码二中的缓冲区中的是char呀,怎么当成int输入了
代码二中是char, 所以只读入了一个字符"1"啊
丁棒儿 2014-02-11
  • 打赏
  • 举报
回复
引用 8 楼 truelance 的回复:
[quote=引用 6 楼 QianShouYuZhiBo 的回复:] [quote=引用 4 楼 truelance 的回复:] cin >> t; 当t时int和char时的处理不同, 其他都是相同的
具体是怎么个不同法呢?[/quote] t是char时, cin >> t; 读入一个字符 t是int时, cin >>t; 依次读入所有0~9的字符,并得到一个整数值[/quote] 可是代码二中的缓冲区中的是char呀,怎么当成int输入了
赵4老师 2014-02-11
  • 打赏
  • 举报
回复
http://www.microsoft.com/visualstudio/chs/downloads#d-2010-express 点开Visual C++ 2010 Express下面的语言选‘简体中文’,再点立即安装 再参考 C:\Program Files\Microsoft Visual Studio 10.0\VC\crt\src\ungetc.c 和 C:\Program Files\Microsoft Visual Studio 10.0\VC\crt\src\ungetc_nolock.inl
赵4老师 2014-02-11
  • 打赏
  • 举报
回复
ungetc, ungetwc Pushes a character back onto the stream. int ungetc( int c, FILE *stream ); wint_t ungetwc( wint_t c, FILE *stream ); Routine Required Header Compatibility ungetc <stdio.h> ANSI, Win 95, Win NT ungetwc <stdio.h> or <wchar.h> ANSI, Win 95, Win NT For additional compatibility information, see Compatibility in the Introduction. Libraries LIBC.LIB Single thread static library, retail version LIBCMT.LIB Multithread static library, retail version MSVCRT.LIB Import library for MSVCRT.DLL, retail version Return Value If successful, each of these functions returns the character argument c. If c cannot be pushed back or if no character has been read, the input stream is unchanged and ungetc returns EOF; ungetwc returns WEOF. Parameters c Character to be pushed stream Pointer to FILE structure Remarks The ungetc function pushes the character c back onto stream and clears the end-of-file indicator. The stream must be open for reading. A subsequent read operation on stream starts with c. An attempt to push EOF onto the stream using ungetc is ignored. Characters placed on the stream by ungetc may be erased if fflush, fseek, fsetpos, or rewind is called before the character is read from the stream. The file-position indicator will have the value it had before the characters were pushed back. The external storage corresponding to the stream is unchanged. On a successful ungetc call against a text stream, the file-position indicator is unspecified until all the pushed-back characters are read or discarded. On each successful ungetc call against a binary stream, the file-position indicator is decremented; if its value was 0 before a call, the value is undefined after the call. Results are unpredictable if ungetc is called twice without a read or file-positioning operation between the two calls. After a call to fscanf, a call to ungetc may fail unless another read operation (such as getc) has been performed. This is because fscanf itself calls ungetc. ungetwc is a wide-character version of ungetc. However, on each successful ungetwc call against a text or binary stream, the value of the file-position indicator is unspecified until all pushed-back characters are read or discarded. Generic-Text Routine Mappings TCHAR.H Routine _UNICODE & _MBCS Not Defined _MBCS Defined _UNICODE Defined _ungettc ungetc ungetc ungetwc Example /* UNGETC.C: This program first converts a character * representation of an unsigned integer to an integer. If * the program encounters a character that is not a digit, * the program uses ungetc to replace it in the stream. */ #include <stdio.h> #include <ctype.h> void main( void ) { int ch; int result = 0; printf( "Enter an integer: " ); /* Read in and convert number: */ while( ((ch = getchar()) != EOF) && isdigit( ch ) ) result = result * 10 + ch - '0'; /* Use digit. */ if( ch != EOF ) ungetc( ch, stdin ); /* Put nondigit back. */ printf( "Number = %d\nNextcharacter in stream = '%c'", result, getchar() ); } Output Enter an integer: 521a Number = 521 Nextcharacter in stream = 'a' Stream I/O Routines See Also getc, putc
熊熊大叔 2014-02-11
  • 打赏
  • 举报
回复
引用 6 楼 QianShouYuZhiBo 的回复:
[quote=引用 4 楼 truelance 的回复:] cin >> t; 当t时int和char时的处理不同, 其他都是相同的
具体是怎么个不同法呢?[/quote] t是char时, cin >> t; 读入一个字符 t是int时, cin >>t; 依次读入所有0~9的字符,并得到一个整数值
The C programming Language 第二版英文版 內容列表 Table of Contents Preface.......................................................... Preface to the first edition..................................... Introduction..................................................... Chapter 1 - A Tutorial Introduction.............................. 1.1 Getting Started................................ 1.2 Variables and Arithmetic Expressions........... 1.3 The for statement.............................. 1.4 Symbolic Constants............................. 1.5 Character Input and Output..................... 1.5.1 File Copying.......................... 1.5.2 Character Counting.................... 1.5.3 Line Counting......................... 1.5.4 Word Counting......................... 1.6 Arrays......................................... 1.7 Functions...................................... 1.8 Arguments - Call by Value...................... 1.9 Character Arrays............................... 1.10 External Variables and Scope.................. Chapter 2 - Types, Operators and Expressions..................... 2.1 Variable Names................................. 2.2 Data Types and Sizes........................... 2.3 Constants...................................... 2.4 Declarations................................... 2.5 Arithmetic Operators........................... 2.6 Relational and Logical Operators............... 2.7 Type Conversions............................... 2.8 Increment and Decrement Operators.............. 2.9 Bitwise Operators.............................. 2.10 Assignment Operators and Expressions.......... 2.11 Conditional Expressions....................... 2.12 Precedence and Order of Evaluation............ Chapter 3 - Control Flow......................................... 3.1 Statements and Blocks.......................... 3.2 If-Else........................................ 3.3 Else-If........................................ 3.4 Switch......................................... 3.5 Loops - While and For.......................... 3.6 Loops - Do-While............................... 3.7 Break and Continue............................. 3.8 Goto and labels................................ Chapter 4 - Functions and Program Structure...................... 4.1 Basics of Functions............................ 4.2 Functions Returning Non-integers............... 4.3 External Variables............................. 4.4 Scope Rules.................................... 4.5 Header Files................................... 4.6 Static Variables................................ 4.7 Register Variables.............................. 4.8 Block Structure................................. 4.9 Initialization.................................. 4.10 Recursion...................................... 4.11 The C Preprocessor............................. 4.11.1 File Inclusion........................ 4.11.2 Macro Substitution.................... 4.11.3 Conditional Inclusion................. Chapter 5 - Pointers and Arrays.................................. 5.1 Pointers and Addresses......................... 5.2 Pointers and Function Arguments................ 5.3 Pointers and Arrays............................ 5.4 Address Arithmetic............................. 5.5 Character Pointers and Functions............... 5.6 Pointer Arrays; Pointers to Pointers........... 5.7 Multi-dimensional Arrays....................... 5.8 Initialization of Pointer Arrays............... 5.9 Pointers vs. Multi-dimensional Arrays.......... 5.10 Command-line Arguments........................ 5.11 Pointers to Functions......................... 5.12 Complicated Declarations...................... Chapter 6 - Structures........................................... 6.1 Basics of Structures........................... 6.2 Structures and Functions....................... 6.3 Arrays of Structures........................... 6.4 Pointers to Structures......................... 6.5 Self-referential Structures.................... 6.6 Table Lookup................................... 6.7 Typedef........................................ 6.8 Unions......................................... 6.9 Bit-fields..................................... Chapter 7 - Input and Output..................................... 7.1 Standard Input and Output....................... 7.2 Formatted Output - printf....................... 7.3 Variable-length Argument Lists.................. 7.4 Formatted Input - Scanf......................... 7.5 File Access..................................... 7.6 Error Handling - Stderr and Exit................ 7.7 Line Input and Output........................... 7.8 Miscellaneous Functions......................... 7.8.1 String Operations...................... 7.8.2 Character Class Testing and Conversion. 7.8.3 Ungetc................................. 7.8.4 Command Execution...................... 7.8.5 Storage Management..................... 7.8.6 Mathematical Functions................. 7.8.7 Random Number generation............... Chapter 8 - The UNIX System Interface............................ 8.1 File Descriptors............................... 8.2 Low Level I/O - Read and Write................. 8.3 Open, Creat, Close, Unlink..................... 8.4 Random Access - Lseek.......................... 8.5 Example - An implementation of Fopen and Getc.. 8.6 Example - Listing Directories.................. 8.7 Example - A Storage Allocator.................. Appendix A - Reference Manual.................................... A.1 Introduction................................... A.2 Lexical Conventions............................ A.2.1 Tokens................................ A.2.2 Comments.............................. A.2.3 Identifiers........................... A.2.4 Keywords.............................. A.2.5 Constants............................. A.2.6 String Literals....................... A.3 Syntax Notation................................ A.4 Meaning of Identifiers......................... A.4.1 Storage Class......................... A.4.2 Basic Types........................... A.4.3 Derived types......................... A.4.4 Type Qualifiers....................... A.5 Objects and Lvalues............................ A.6 Conversions.................................... A.6.1 Integral Promotion.................... A.6.2 Integral Conversions.................. A.6.3 Integer and Floating.................. A.6.4 Floating Types........................ A.6.5 Arithmetic Conversions................ A.6.6 Pointers and Integers................. A.6.7 Void.................................. A.6.8 Pointers to Void...................... A.7 Expressions.................................... A.7.1 Pointer Conversion.................... A.7.2 Primary Expressions................... A.7.3 Postfix Expressions................... A.7.4 Unary Operators....................... A.7.5 Casts................................. A.7.6 Multiplicative Operators.............. A.7.7 Additive Operators.................... A.7.8 Shift Operators....................... A.7.9 Relational Operators.................. A.7.10 Equality Operators................... A.7.11 Bitwise AND Operator................. A.7.12 Bitwise Exclusive OR Operator........ A.7.13 Bitwise Inclusive OR Operator........ A.7.14 Logical AND Operator................. A.7.15 Logical OR Operator.................. A.7.16 Conditional Operator................. A.7.17 Assignment Expressions............... A.7.18 Comma Operator.......................... A.7.19 Constant Expressions.................... A.8 Declarations..................................... A.8.1 Storage Class Specifiers................. A.8.2 Type Specifiers.......................... A.8.3 Structure and Union Declarations......... A.8.4 Enumerations............................. A.8.5 Declarators.............................. A.8.6 Meaning of Declarators................... A.8.7 Initialization........................... A.8.8 Type names............................... A.8.9 Typedef.................................. A.8.10 Type Equivalence........................ A.9 Statements....................................... A.9.1 Labeled Statements....................... A.9.2 Expression Statement..................... A.9.3 Compound Statement....................... A.9.4 Selection Statements..................... A.9.5 Iteration Statements..................... A.9.6 Jump statements.......................... A.10 External Declarations........................... A.10.1 Function Definitions.................... A.10.2 External Declarations................... A.11 Scope and Linkage............................... A.11.1 Lexical Scope........................... A.11.2 Linkage................................. A.12 Preprocessing................................... A.12.1 Trigraph Sequences...................... A.12.2 Line Splicing........................... A.12.3 Macro Definition and Expansion.......... A.12.4 File Inclusion.......................... A.12.5 Conditional Compilation................. A.12.6 Line Control............................ A.12.7 Error Generation........................ A.12.8 Pragmas................................. A.12.9 Null directive.......................... A.12.10 Predefined names....................... A.13 Grammar......................................... Appendix B - Standard Library.................................... B.1.1 File Operations................................ B.1.2 Formatted Output......................... B.1.3 Formatted Input.......................... B.1.4 Character Input and Output Functions..... B.1.5 Direct Input and Output Functions........ B.1.6 File Positioning Functions............... B.1.7 Error Functions.......................... B.2 Character Class Tests: ................. B.3 String Functions: ..................... B.4 Mathematical Functions: ................. B.5 Utility Functions: ....................

65,187

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧