用fgets怎么输出逆序数的简单介绍
文件逆序输出
这个是利用系统栈进行的递归操作。函数在运行时,会进行先进后出递归调用。
在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;
}
试运行结果如下图: