C语言编程问题?

思路:

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,也...

  • C语言编程问题?
  • 答:应该是(*(n+i) != m)去掉m上的单引号.还有就是主函数main输入字符串并存入数组a太复杂,用一句fgets就行了.(不用gets函数,因为gets函数不检查数组越界)改完后的C语言程序如下 include <stdio.h> char *find(char* ...

  • c语言题目 ?
  • 答:通过观察你这个c语言代码,这个i变量是用来控制首个数前面不要空格的。如果是第一个数就前面不输出空格,第二个数要输出空格,因为你的题目要求结果每个数字要用空格隔开。

  • 一些C语言的问题,很紧急,非常感谢您能回答!!!
  • 答:1.下列关于C语言特点的描述,不正确的是 C 。A)C语言兼有高级语言和低级语言的双重特点,执行效率高 B)C语言可以用来编写应用程序,又可用以编写系统软件 C)C语言的可移植性较差 D)C语言是一种结构式模块化程序...

  • c语言编程问题!!
  • 答:2020-05-21 C语言编程问题? 41 2020-04-21 关于c语言编程问题! 36 2020-04-09 关于c语言编程问题! 33 2020-01-15 C语言编程的问题! 27 2019-05-27 C语言编程问题! 30 2011-10-08 C语言编程问题!!! 更多类似问题...

  • 求C语言编程题
  • 答:求大量C语言编程题,最好附上代码我要的是有解释的,有思路,最好跟书上的解答一样... 求大量C语言编程题,最好附上代码我要的是有解释的,有思路,最好跟书上的解答一样 展开  我来答 ...

  • C语言 编程题
  • 答:这个程序的具体运行是:将n的值输入1后,因为s=0,a=5,do...while循环的基本要求是:do{循环体;}while(表达式);,在执行这个循环是,先执行循环体,再判断表达式,若表达式为非0的话,继续执行循环,若表达式的值为0,...

  • C语言编程初学问题
  • 答:(1)程序输出:c1=a;c2=b;c1=97;c2=98;因为:你用%c,就是你要输出一个字符,97的ascii码就是小写字母a,98为b;(2)如果你把c1=197,c2=198,应该会提示隐式转换吧,如果定义char c1,c2,默认为有符号的...

  • C语言编程(搬砖问题)
  • 答:算法:4x+3y+z=36x+y+z=36x,y,z属于小于36的正整数由于36个人搬,所以x不会大于9,y不会大于12,z不会大于36所以直到测试完三个条件才算考虑完毕所有情况为了简化思路,将三个条件分开首先固定x,如果x不大于9则开始...

  • C语言编程 题目描述 使用选择排序法对数组元素进行排序,要求输出每一 ...
  • 答:include<stdio.h> int main(){int n,i,j,k,t,a[20];scanf("%d",&n);for(i=0;i<n;i++)scanf("%d",&a[i]);for(i=0;i<n-1;i++){k=i;for(j=i+1;j<n;j++)if(a[j]<a[k])k=j;t=a...

  • 用C语言编程程序没有错误为什么结果不对
  • 答:程序可以运行并不表示程序就是正确的 编译和连接都正确,只能说明编译器对他进行语法等检查 没发现他的错误而已,而既然运行结果是错误的,那就是说明一点 可能是你的算法设计的不当,不能正确的解决问题,这样发生的错误 是运行...

    为传递更多家电数码信息,若有事情请联系
    数码大全网