思路:
1、利用ftell函数获取文件的长度(字节数)。
2、利用fread函数读取文件所有内容。
3、通过遍历字符串,进行大小写判断及转换。
下面是演示代码:(命令符不想输入,连续两次回车)
#include <stdio.h>
#include <malloc.h>
#include <string.h>
#define FPH "C:\est.txt"
long getFileSize(char path[]);//获取文件长度
char *readFFile(char path[]);//获取文件内容
int printfStrsByCommand(char *strs,char *com);//通过命令符,打印对应格式的字符串内容
//com为命令符,如下:(缺省传NULL,程序取默认值-p)
//-p 按原样打印
//-u 把输入转换成大写
//-l 把输入转换成小写
int main()
{
int i=0;
char *strs=NULL,com[3]={0};
strs=readFFile(FPH);
printf("请输入打印输出样式的命令符(-p\\-u\\-l):");
while(i<2)com[i++]=getchar();
printfStrsByCommand(strs,com);
free(strs);//这个释放对本程序无意义,可删除,因为程序到此就结束了。
strs=NULL;//但是如你后面还添加其它代码,strs不再使用需这样释放。
return 0;
}
int printfStrsByCommand(char *strs,char *com)
{
char c[]="-p",*p=NULL;
if(strs)
{
if(!com) com=c;
if(!strcmp(com,"-u"))
{
p=strs;
while(*p)
{
if(*p>='a' && *p<='z')
*p^=32;
p++;
}
printf("转换成大写打印输出:
");
}
if(!strcmp(com,"-l"))
{
p=strs;
while(*p)
{
if(*p>='A' && *p<='Z')
*p^=32;
p++;
}
printf("转换成小写打印输出:
");
}
if(strcmp(com,"-p") && strcmp(com,"-u") && strcmp(com,"-l"))
printf("无效命令符!按-p打印输出:
");
}
printf("%s
",strs);
return 1;
}
long getFileSize(char path[])
{
long flen;
FILE *fp=NULL;
fp=fopen(path,"rb");
if(!fp) return -1;
fseek(fp,0L,SEEK_END);
flen=ftell(fp);
fclose(fp);
return flen;
}
char *readFFile(char path[])
{
long size=0;
char *strs=NULL;
FILE *fp=NULL;
fp=fopen(path,"rb");
if(!fp){fclose(fp);return NULL;}
fseek(fp,0L,SEEK_SET);
size=getFileSize(FPH);
strs=(char *)malloc(sizeof(char)*(size+1));
if(!strs){{fclose(fp);return NULL;}}
if(fread(strs,1,size,fp)<size)
{
free(strs);
fclose(fp);
return NULL;
}
strs[size]=0;
fclose(fp);
return strs;
}
~
#13641045680#
C语言编程问题 ******
#巴兰# 程序没有问题,可能是编程环境的漏洞,你换个编程环境或者将可执行文件删掉重新运行一次吧!
#13641045680#
C语言编程问题 ******
#巴兰# scanf是一个ANSI C标准格式化输入函数,标准库对它的转换说明符 对"s"的描述中是其读取一个多字节字符序列并自动添加一个空字符,开始时扫描输入流的第一个非空白字符进行后续读取直到以一个isspace()能识别的空白字符结束,所以它只能读单词. 简单改成: gets(str); 就可以了.或者编写更正式和安全的: fgets(str, 100 - 1, stdin); str[strchr(str, '\n') - str] = '\0';
#13641045680#
C语言编程问题 ******
#巴兰# for(i=1;i>0;i++)这是一个死循环,也就是你输入一个字符后,比如 输入 A,然后按回车,这时候程序处理了A这个字符后,会紧接着处理 回车 这个字符,而回车字符会进入default.
#13641045680#
C语言编程问题 - ******
#巴兰#你这个程序有两个粗心错误,所以不能运行.if(k='\n') 这一句应该是 if(k=='\n') 吧,这是粗心的吧!以后要注意,这种if里的语句,你可以这样写,容易差错: if('\...
#13641045680#
C语言编程问题 ******
#巴兰# 程序运行时先进入第一个switch语句,即switch(a>0),你可能认为它是值是2,所以直接执行default了吧?其实它的值不是2,而是1,因为a>0是一个表达式,它返回的是真或假的值,因为a=2,是大于0的,所以这个式子成立,所以返回的值为真...
#13641045680#
C语言编程问题 ******
#巴兰# #include <stdio.h>int main(){int n,wei;while(1){int g=0,s=0,b=0,q=0,w=0;//个、十、百、千、万printf("请输入一个数:");scanf("%d",&n);if(n/10000==0){if(n/1000==0){if(n/100==0){if(n/10==0){wei=1;g=n%10;}else{wei=2;s=n/10;g=n%10;}...
#13641045680#
C语言编程问题 ******
#巴兰##include <stdlib.h> #include <stdio.h> int m[8][8] = {0};//表示棋盘,初始为0,表示未放置皇后 int num = 0;//解数目 //对于棋盘前row-1行已放置好皇后 //检查在第row行、第column列放置一枚皇后是否可行 bool check(int row,int column) // 1,1 2,1 ...
#13641045680#
c程序编程的问题 ******
#巴兰# 编程说起来很复杂,但是还是多了解些会好:简单的说,编程就是为了借助于计算机来达到某一目的或解决某个问题,而使用某种程序设计语言编写程序代码,并最终得到结果的过程. 计算机虽然功能十分强大.可以供你上网、打游戏、管理公...
#13641045680#
c 语言编程问题 - ******
#巴兰# #include "stdio.h"#include "math.h"#define MAX 200typedef struct think_price //定义结构体保存数据{ int no; int price;}Think_Price;void main(){ Think_Price a[M...
#13641045680#
C语言的编程问题 - ******
#巴兰# 给你改对了;C中最好别用a<n<b这种形式,TC中都不能编译通过的 VC中虽然可以编译通过,但是,以234000为例:当执行到你的1e5<I<=2e5时,它是由左到右的:(1e5<I)<=2e51e5<I这个式子是个逻辑表达式,其值要么是0,要么是1,也...