#include <stdio.h>
int main(void)
{
int c;
while ((c=getchar()) != EOF)
putchar(c);
return 0;
}
其中(c=getchar())表达式的值为c为了解决区分有效输入和文件结束符,C语言采用EOF(当没有输入时,getchar()将返回一个特殊值,这个特殊值就是EOF)Windows中 Ctrl+z结束,Linux中Ctrl+d结束上诉程序还需注意的是 !=的优先级大于=的优先级
3. 关于字节长度,2位机上long为4个字节,
打印long,printf(“%ld”) ,printf(“%.0f”,f),强制不打印小数点和小数部分(若想表示个更大范围的整数,可double i)
4. for 和 while 语句的优点之就是:在执行循环体一开始就对条件进行测试
5. 看一下Linux 中的wc程序的主干部分
#include <stdio.h>
#define IN 1 /* 在单词内*/
#define OUT 0 /* 在单词外*/
/* 统计输入的行数、单词数与字符数*/
int main(void)
{
int c,nl,nw,nc,state;
state = OUT;
nl = nw = nc = 0;
while ( (c=getchar()) != EOF)
{
++nc;
if (c == '\n')
++nl;
if (c==' ' || c=='\n' || c=='\t')
state = OUT;
else if (state == OUT)
{
state = IN;
++nw;
}
}
printf("%d %d %d\n",nl,nw,nc);
return 0;
}
#include <stdio.h>
#define MAXLINE 1000
int getline(char line[], int maxline);
void copy(char to[], char from[]);
/* 打印输出最长行 */
int main(void)
{
int len;
int max;
char line[MAXLINE];
char longest[MAXLINE];
max = 0;
while ( (len=getline(line,MAXLINE)) > 0)
{
if (len > max)
{
max = len;
copy(longest,line);
}
}
if (max > 0)
printf("%s",longest);
return 0;
}
/*将一行读入到s中并返回其长度*/
int getline(char s[], int lim)
{
int c,i;
for (i=0; i<lim-1 && ( (c=getchar()) != EOF) && c!='\n'; ++i)
s[i] = c;
//保存'\n'的
if (c == '\n')
{
s[i] = c;
++i;
}
s[i] = '\0';
return i;
}
void copy(char to[], char from[])
{
int i;
i = 0;
while ( (to[i] = from[i]) != '\0') //将'\0'也给拷贝了
++i;
}
#include <stdio.h>
#define MAXLINE 1000
int max;
char line[MAXLINE];
char longest[MAXLINE];
int getline(void);
void copy(void);
/* 打印输出最长行 */
int main(void)
{
int len;
extern int max;
extern char longest[MAXLINE];
max = 0;
while ( (len=getline()) > 0)
{
if (len > max)
{
max = len;
copy();
}
}
if (max > 0)
printf("%s",longest);
return 0;
}
/*将一行读入到s中并返回其长度*/
int getline(void)
{
int c,i;
extern char line[];
for (i=0; i<MAXLINE-1 && ( (c=getchar()) != EOF) && c!='\n'; ++i)
line[i] = c;
if (c == '\n')
{
line[i] = c;
++i;
}
line[i] = '\0';
return i;
}
void copy(void)
{
int i;
extern char line[],longest[];
i = 0;
while ( (longest[i] = line[i]) != '\0')
++i;
}