C.Primer.Plus.5e
7.2.1 介绍getchar()和putchar()
前面的多数程序所输入的内容都是数字。为了练习使用其他的形式,让我们来看一个面向字符的例子。
现在我们将接触专门为面向字符I/O而设计的一对C函数:getchar()和putchar()。
.
getchar()函数没有参数,它返回来自输入设备的下一个字符。例如,下面的语句读取下一个输入字符并将它的值赋给变量ch:
ch = getchar();
该语句与下面的语句有同样的效果:
scanf("%c", &ch);
.
putchar()函数打印它的参数。例如,下面的语句将先前赋给ch的值作为字符打印出来:
putchar(ch);
该语句与下面的语句有同样的效果:
printf("%c", ch);
.
因为这些函数仅仅处理字符,所以它们比更通用的scanf()和printf()函数更快而且更简洁。同样,注意到它们不需要格式说明符,因为它们只对字符起作用。这两个函数通常都在stdio.h文件中定义(而且,它们通常只是预处理宏(macro),而不是真正的函数;我们将在16章“C预处理器和C库”中讨论类似函数的宏)。
.
.
7.3.3 求值的顺序
除了那些两个运算符共享一个操作数的情况以外,C通常不保证复杂表达式的哪个部分首先被求值。
例如在下面的语句里,可能先计算表达式5+3的值,也可能先计算9+6的值。
apples = (5 + 3) * (9 + 6)
C语言允许这种不确定性,以便编译器设计者可以针对特定的系统做出最有效率的选择。一个例外是对逻辑运算符的处理。C保证逻辑表达式是从左至右求值的。&&和||运算符是序列的分界点,因此在程序从一个操作数前进到下一个操作数之前,所有的副作用都会生效。而且,C保证一旦发现某个元素使表达式总体无效,求值将立刻停止。这些约定像下面这样的结构成为可能:
while ((c = getchar()) != '' && c != '\n')
这个结构建立一个循环读入字符,直到出现第一个空格符或换行符。第一个子表达式给c赋值,然后c的值被用在第二个子表达式中。如果没有顺序保障,计算机可能试图在c被赋值之前判断第二个子表达式。
.
下面是另外一个例子:
if (number != 0 && 12 / number == 2)
printf("The number is 5 or 6.\n")
如果number值为0,那么第一个子表达式为假,就不再对关系表达式求值。这就避免了计算机试图把0作为除数。很多语言都没有这个特性,在知道number为0后,它们仍将继续后面的条件检查。
.
最后,考虑这个例子:
while (x++ < 10 &&
相关文档:
这篇文章是使用SQLite C/C++接口的一个概要介绍和入门指南。
由于早期的SQLite只支持5个C/C++接口,因而非常容易学习和使用,但是随着SQLite功能的增强,新的C/C++接口不断的增加进来,到现在有超过150个不同的API接口。这往往使初学者望而却步。幸运的是,大多数SQLite中的C/C++接口是专用的,因而很少被使用到。尽管有这 ......
编者按:非常基本关于C语言的问题,一个信息类(计算机,资讯工程,电子工程, 通信
工程)专业的本科毕业生应该达到的水平。题目不难,全部都能快速地答完,当然也需要
一定的知识储备。
对于大多数人,我们预期你可能答错 1) 4) 15)题,所以答错3道以内的,我们认为
你很棒
答错5道题以 ......
计算线程执行某项任务消耗的时间时,许多开发人员会调用GetTickCount/GetTickCount64编写如下的代码:
// Get the current time (start time)
ULONGLONG qwStartTime = GetTickCount64();
// Perform complex algorithm here
// Subtract start time from current time to get duration
ULONGLONG dwElapsedTime = Get ......
最近因为研究一个东西,并且在很久以前就想把python好好看看。正好满足我的好奇心。我每天上班做得游戏都是用lua,也是一门很强大的脚本语言。可能我更喜欢python的缩进区分和面向对象吧。 今天只写一个简单的例子。一个简单的python脚本,就一个函数,用C/C++去调用。可能这也是作为程序来说最关心的一件事。所以我的pytho ......
// 方案— 优点:仅使用C 标准库;缺点:只能精确到秒级
#include <time.h>
#include <stdio.h>
int main( void )
{
time_t t = time(0);
char tmp[64];
strftime( tmp, sizeof(tmp), "%Y/%m/%d %X %A 本年第%j天 %z",localtim ......