用fgets怎么输出逆序数的简单介绍

http://www.itjxue.com  2023-01-07 18:19  来源:未知  点击次数: 

文件逆序输出

这个是利用系统栈进行的递归操作。函数在运行时,会进行先进后出递归调用。

在if(next fgets(buf, 1024, fp1) != NULL) 行时,读取了文件的一行。如果第一次读到了的是最后一行则停止递归,并在else if(next) 行里将next改写成0。这样之后递归就不会在之前读取一行时取到数字了。

然后程序将按照递归栈中的顺序,先进后出的一层层的退到最开始的那层函数里。也就是说,每写一行,都是因为函数运行了一次,递归栈里就弹出了一次函数。

函数的返回,如果你写的是int fun()这样的函数,你会在最后写个return 0;之类的东西。这就是让函数在系统栈里退回到main()函数的命令。同理,这里函数运行到最后,虽然没有return,只有一个}右大括号,也是表示函数结束。系统将自动查询函数是从哪里进入的,就返回它进入的地方,并继续执行下一行。

如果你在函数里直接用return命令,也可以跳出void开头的函数。

5、输入一个字符串,对该字符串进行逆序,输出逆序后的字符串。

举例:

#includestdio.h

int main()

{

int i, j, cnt;

char ch, a[80], b[80];

ch=getchar();

for(i=0; ch!='\n'; i++){

a[i]=ch;

cnt++;

ch=getchar();

}

for(i=0, j=cnt-1; icnt; i++, j--)

b[j]=a[i];

for(i=0; icnt; i++)

printf("%c", b[i]);

return 0;

}

运行:输出格式:

在一行中输出逆序后的字符串。

输入样例:

Hello World!

输出样例:

!dlroW olleH

扩展资料:

return表示从被调函数返回到主调函数继续执行,返回时可附带一个返回值,由return后面的参数指定。return通常是必要的,因为函数调用的时候计算结果通常是通过返回值带出的。

如果函数执行不需要返回计算结果,也经常需要返回一个状态码来表示函数执行的顺利与否(-1和0就是最常用的状态码),主调函数可以通过返回值判断被调函数的执行情况。

如果函数名前有返回类型定义,如int,double等就必须有返回值,而如果是void型,则可以不写return,但这时即使写了也无法返回数值。

【编程求助】用标准C实现文本文件按行反序输出

写得比较繁琐,而且。。。直接在main里面写的。。。

#include stdio.h

#include stdlib.h

#include string.h

/* 每行最大数据数 */

#define MAX_NUM 80

/* 分页的行数,每次读了MAX_LINE行数据之后写入临时文件 */

#define MAX_LINE 2

/* 临时文件的前缀 */

#define TMP_FILE_NAME_PRE "text2.log.temp"

void err_exit(const char *info, int exit_code) {

puts(info);

exit(exit_code);

}

int main() {

FILE *in, *out, *out_tmp;

char str_data[MAX_LINE][MAX_NUM]; /* 最大读取内存 */

char tmp_file[256]; /* 保存临时文件名 */

int line_id; /* 读取的行数 */

int i;

int seq_flag; /* 分页数,即临时文件数 */

line_id = seq_flag = 0;

if ( (in=fopen("text1.log", "r")) == 0)

err_exit("Can't open file - text1.log\n", 1);

if ( (out=fopen("text2.log", "w")) == 0) {

fclose(in);

err_exit("Can't create file - text2.log\n", 2);

}

/* 逐行读取, 不为0时正常读入 */

while (fgets(str_data[line_id++], MAX_NUM, in) != 0) {

if (feof(in)) break; /* 读完,退出 */

if (line_id == MAX_LINE) { /* 读取行数到最大行数,将已读数据写入文件 */

line_id = 0; /* 重置读取行数为0 */

snprintf(tmp_file, 256, TMP_FILE_NAME_PRE "%d", seq_flag++); /* 设置临时文件名=临时文件前缀+分页ID */

/* 创建 */

if ((out_tmp = fopen(tmp_file, "w")) == 0) {

fclose(in);

fclose(out);

remove("text2.log");

err_exit("Can't create temp file...", 3);

}

/* 将已读数据逆序写入临时文件 */

for (i=MAX_LINE-1; i-1; --i) {

fputs(str_data[i], out_tmp);

}

fclose(out_tmp); /* 关闭文件 */

}

}

fclose(in); /* 数据已读完,关闭in */

/* 检测语句是否以\n结束...此句用检测不以\n结束的原文件 */

/* 提出原文件的最后一句,检测是否以\n结束,如果不以\n结束,写入新文件时添加\n */

if (line_id - 1 -1) {

fputs(str_data[line_id-1], out);

if (str_data[line_id - 1][strlen(str_data[line_id - 1]) - 1] != '\n') {

fputs("\n", out);

}

}

/* 从倒数第二句继续写入 */

for (i=line_id-2; i-1; --i) {

fputs(str_data[i], out);

}

/* 若之前有产生临时文件,读取临时文件的内存并写入目标文件,同时删除临时文件 */

while (seq_flag-- 0) {

snprintf(tmp_file, 256, TMP_FILE_NAME_PRE "%d", seq_flag); /* 最后一个临时文件 */

in = fopen(tmp_file, "r"); /* 打开临时文件....此处未进行检测... */

/* 读取并写入 */

while (fgets(str_data[0], MAX_NUM, in) != 0)

fputs(str_data[0], out);

fclose(in);

remove(tmp_file); /* 删除临时文件... */

}

fclose(out);

printf("DONE...\n");

}

c语言要求用户输入一串字符然后逆序输出

#include stdio.h

#include string.h

int main()

{

char buf[BUFSIZ], tmp;

int i, len;

fgets(buf, BUFSIZ, stdin);

len = strlen(buf);

if (buf[len - 1] == '\n') buf[--len] = '\0';

for (i = 0; i len / 2; ++i) {

tmp = buf[i];

buf[i] = buf[len - i - 1];

buf[len - i - 1] = tmp;

}

puts(buf);

return 0;

}

c语言程序问题 1.从键盘输入一个字符串,并对其逆序输出。 2.从键盘输

(1)

#include?"stdio.h"

#include?"string.h"

int?main(int?argc,char?*argv[]){

char?s[300];

int?i;

printf("Input?a?string...\ns=");

fgets(s,300,stdin);

for(i=strlen(s)-1;i=0;printf("%c",s[i--]));

printf("\n");

return?0;

}

试运行结果:

(2)

#include?"stdio.h"

int?main(int?argc,char?*argv[]){

int?a[100],i,sum;

double?ave;

printf("Input?some?data(int,?'Enter'?end)...\n");

for(sum=i=0;i100;i++){

scanf("%d",a+i);

sum+=a[i];

if(getchar()=='\n')

break;

}

printf("The?AVERAGE?are?%g\n",ave=sum/(i+0.0));

printf("Less?than?the?average?number(%g)?is?as?follows:\n",ave);

for(;i=0;i--)

if(avea[i])

printf("%d?",a[i]);

printf("\n");

return?0;

}

试运行结果如下图:

(责任编辑:IT教学网)

更多

推荐Painter教程文章