例156:计算输入的行数
#include <stdio.h>
int main(int argc, char const *argv[])
{
char line[256];
long line_count = 0;
// windows输入ctrl+z结束
while (fgets(line, sizeof(line), stdin))
line_count++;
printf("The number of redirected lines: %ld\n", line_count);
return 0;
}
例157:将输入的字符串转为小写
#include <stdio.h>
#include <ctype.h>
int main(int argc, char const *argv[])
{
int letter;
// 读取单个字符,直到文件结束符
for (letter = getchar(); !feof(stdin); letter = getchar())
// tolower将大写字母转换为小写字母
putchar(tolower(letter));
return 0;
}
例158:无法编译
#include <stdio.h>
#include <dos.h>
int main(int argc, char const *argv[])
{
char buffer[256];
long row_count = 0;
union REGS inregs, outregs;
int ctrl_key_pressed, scancode;
while (fgets (buffer, sizeof(buffer), stdin))
{
fputs (buffer, stdout);
if ((++row_count % 24) == 0)
{
printf ("-- More --");
inregs.h.ah = 0;
int86 (0x16, &inregs, &outregs);
scancode = outregs.h.ah;
ctrl_key_pressed = 0;
inregs.h.ah = 2;
int86 (0x16, &inregs, &outregs);
if ((ctrl_key_pressed) && (scancode == 0x2E))
break;
printf ("\r");
}
}
return 0;
}
例159:无法编译
#include <stdio.h>
#include <time.h>
#include <dos.h>
int main(int argc, char const *argv[])
{
char buffer[256];
char key_pressed = 0;
long int counter = 1;
union REGS inregs, outregs;
time_t start_time, current_time, end_time;
while (fgets(buffer, sizeof(buffer), stdin))
{
fputs (buffer, stdout);
if ((++counter % 25) == 0)
{
time (&start_time);
end_time = start_time + 15;
do
{
key_pressed = 0;
time (¤t_time);
inregs.h.ah = 1;
int86 (0x16, &inregs, &outregs);
if ((outregs.x.flags & 64) == 0)
{
key_pressed = 1;
do {
inregs.h.ah = 0;
int86 (0x16, &inregs, &outregs);
inregs.h.ah = 1;
int86 (0x16, &inregs, &outregs);
} while (! (outregs.x.flags & 64));
}
}while ((current_time != end_time) && (! key_pressed));
}
}
return 0;
}
例160:读取文件并在控制台中打印
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char const *argv[])
{
char line[255];
FILE *fp;
// 读取程序参数文件路径
if (fp = fopen(argv[1], "r"))
{
while (fgets(line, sizeof(line), fp))
// 在标准输出流输出
fputs(line, stdout);
fclose(fp);
exit(0);
}
else
{
printf("Cannot open %s\n", argv[1]);
exit (1);
}
return 0;
}
例161:无法编译
#include <stdio.h>
#include <dos.h>
int main(int argc, char const *argv[])
{
union REGS inregs, outregs;
inregs.x.ax = 0x4400;
inregs.x.bx = 0;
intdos (&inregs, &outregs);
if ((outregs.x.dx & 1) && (outregs.x.dx & 128))
fprintf (stderr, "stdin has not been redirected\n");
else
fprintf (stderr, "stdin is redirected\n");
inregs.x.ax = 0x4400;
inregs.x.bx = 1;
intdos (&inregs, &outregs);
if ((outregs.x.dx & 2) && (outregs.x.dx & 128))
fprintf (stderr, "stdout has not been redirected\n");
else
fprintf (stderr, "stdout is redirected\n");
return 0;
}
例162:打印用户输入的字符串并记录当前输入的第几行
#include <stdio.h>
int main(int argc, char const *argv[])
{
char line[255];
long line_number = 0;
while (fgets(line, sizeof(line), stdin))
printf("%ld %s", ++line_number, line);
return 0;
}
例163:在标准打印机流打印
#include <stdio.h>
#include <string.h>
int main(int argc, char const *argv[])
{
char line[255];
while (fgets(line, sizeof(line), stdin))
{
fputs(line, stdout);
strcat(line, "\r");
// stdprn是标准打印机输出流
fputs(line, stdprn);
}
return 0;
}
例164:添加环境变量
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char const *argv[])
{
// putenv()用来改变或增加环境变量的内容格式为name=value
if (putenv("BOOK=Jamsa's 1001 C & C++ Tips"))
printf("Error writing to environment\n");
else
{
int i;
for (i = 0; environ[i]; ++i)
printf("%s\n", environ[i]);
}
return 0;
}
例165:读取文件并在控制台打印
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char const *argv[])
{
char line[255];
FILE *fp;
if (fp = fopen(argv[1], "r"))
{
while (fgets(line, sizeof(line), fp))
fputs(line, stdout);
fclose(fp);
return(0);
}
else
{
printf("Cannot open %s\n", argv[1]);
return(1);
}
return 0;
}
例166:在控制台显示程序的所有参数
#include <stdio.h>
int main(int argc, char const *argv[])
{
int i;
for (i = 0; i < argc; ++i)
printf ("argv[%d] points to %s\n", i, argv[i]);
return 0;
}
例167:在控制台打印环境变量
#include <stdio.h>
int main (int argc, char *argv[], char *env[])
{
int i;
for (i = 0; env[i] != NULL; i++)
printf ("env[%d] points to %s\n", i, env[i]);
return 0;
}