关于5303狄惟佳同学的myod程序设计的补充实现
关于5303狄惟佳同学的myod程序设计的补充实现
原版代码实现的局限
- 原版代码主函数
int main(int argc,char *argv[])
{
if(strcmp(argv[1], "-tc")==0){
FILE *file=fopen(argv[3],"r");
tc(file);
}
if(strcmp(argv[2], "-tx1")==0){
FILE *file=fopen(argv[3],"r");
tx(file);
}
else if(strcmp(argv[2], "-to1")==0){
FILE *file=fopen(argv[3],"r");
to(file);
}
else if(strcmp(argv[2], "-td1")==0){
FILE *file=fopen(argv[3],"r");
td(file);
}
return 0;
}
- 通过阅读主函数,就可以知道本程序过于依赖argv的传参,而忽视argc的传参功能,从而导致本程序在用户使用上就成了,我只能按照
-tc -tx1 123.txt
或者-tc -to1 123.txt
这样的形式(即-tc必须在前,后面只能跟-tx1或者-to1,或者-td1)去输入,这就有点局限了,而linux上面真正是随便几个参数的输入,也随便顺序如何都可以按照用户的输入去调整输出形式,所以稍稍修改一下主函数之后是这样的
int main(int argc,char *argv[])
{
int i;
for(i=1;i<argc-1;i++){
if(strcmp(argv[i], "-tc")==0){
FILE *file=fopen(argv[argc-1],"r");
tc(file);
}
if(strcmp(argv[i], "-tx1")==0){
FILE *file=fopen(argv[argc-1],"r");
tx(file);
}
else if(strcmp(argv[i], "-to1")==0){
FILE *file=fopen(argv[argc-1],"r");
to(file);
}
else if(strcmp(argv[i], "-td1")==0){
FILE *file=fopen(argv[argc-1],"r");
td(file);
}
}
return 0;
}
- 第二个局限的地方就是后面用到的
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
函数里面的coord
值得设计了,如果只按照之前所说的,惟佳同学的设计,以及用户的“使用手则”的话,这样设初值是没有问题的,但如果主函数改变之后,就会出现行之间的覆盖的问题,这也就是光标设置错误导致的,下面是修改后的-tc函数的代码:
void tc(FILE *file,int n)
{
//Initialize the coordinates
COORD coord = {0, n};
//Set the position
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
char ch[18];
int i=0,j=0;
while(fgets(ch,17,file)!=NULL){
printf("%07o",16*j);
j++;
for(i=0;i<16;i++)
{
if(ch[i]=='\n')
{ i++;
putchar(' ');
printf("\\n");
}
if(ch[i]=='\0')
break;
putchar(' ');
putchar(' ');
printf("%c", ch[i]);
putchar(' ');
}
int k;
for(k=0;k<count;k++)
printf("\n");
}
printf("%07o",16*(j-1)+i);
fclose(file);
}
- 此时主函数也需要改变(增加了全局变量count,用来记录命令行传参的个数减一,方便后续的换行,以达信息到不被覆盖):
int count=0;
int main(int argc,char *argv[])
{
int i;
count=argc-2;
for(i=1;i<argc-1;i++){
if(strcmp(argv[i], "-tc")==0){
FILE *file=fopen(argv[argc-1],"r");
tc(file,i-1);
}
if(strcmp(argv[i], "-tx1")==0){
FILE *file=fopen(argv[argc-1],"r");
tx(file,i-1);
}
else if(strcmp(argv[i], "-to1")==0){
FILE *file=fopen(argv[argc-1],"r");
to(file,i-1);
}
else if(strcmp(argv[i], "-td1")==0){
FILE *file=fopen(argv[argc-1],"r");
td(file,i-1);
}
}
return 0;
}
- 后面的几个函数也和-tc差不多(详见附录一)
- 下面是几个运行截图:
附录一
- 修改后的源代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
#include <conio.h>
void tc(FILE *file,int n);
void tx(FILE *file,int n);
void to(FILE *file,int n);
void td(FILE *file,int n);
int count=0;
int main(int argc,char *argv[])
{
int i;
count=argc-2;
for(i=1;i<argc-1;i++){
if(strcmp(argv[i], "-tc")==0){
FILE *file=fopen(argv[argc-1],"r");
tc(file,i-1);
}
if(strcmp(argv[i], "-tx1")==0){
FILE *file=fopen(argv[argc-1],"r");
tx(file,i-1);
}
else if(strcmp(argv[i], "-to1")==0){
FILE *file=fopen(argv[argc-1],"r");
to(file,i-1);
}
else if(strcmp(argv[i], "-td1")==0){
FILE *file=fopen(argv[argc-1],"r");
td(file,i-1);
}
}
return 0;
}
void tc(FILE *file,int n)
{
//Initialize the coordinates
COORD coord = {0, n};
//Set the position
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
char ch[18];
int i=0,j=0;
while(fgets(ch,17,file)!=NULL){
printf("%07o",16*j);
j++;
for(i=0;i<16;i++)
{
if(ch[i]=='\n')
{ i++;
putchar(' ');
printf("\\n");
}
if(ch[i]=='\0')
break;
putchar(' ');
putchar(' ');
printf("%c", ch[i]);
putchar(' ');
}
int k;
for(k=0;k<count;k++)
printf("\n");
}
printf("%07o",16*(j-1)+i);
fclose(file);
}
void tx(FILE *file,int n)
{
//Initialize the coordinates
COORD coord = {0, n};
//Set the position
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
char ch[18];
int i;
while(fgets(ch,17,file)!=NULL){
printf(" ");
for(i=0;i<16;i++)
{
if(ch[i]=='\n')
{ i++;
printf("%3x ",'\n');
}
if(ch[i]=='\0')
break;
printf("%3x ",ch[i]);
}
int k;
for(k=0;k<count;k++)
printf("\n");
}
fclose(file);
}
void to(FILE *file,int n)
{
//Initialize the coordinates
COORD coord = {0, n};
//Set the position
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
char ch[18];
int i;
while(fgets(ch,17,file)!=NULL){
printf(" ");
for(i=0;i<16;i++)
{
if(ch[i]=='\n')
{ i++;
printf("%03o ",'\n');}
if(ch[i]=='\0')
break;
printf("%03o ",ch[i]);
}
int k;
for(k=0;k<count;k++)
printf("\n");
}
fclose(file);
}
void td(FILE *file,int n)
{
//Initialize the coordinates
COORD coord = {0, n};
//Set the position
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
char ch[18];
int i;
while(fgets(ch,17,file)!=NULL){
printf(" ");
for(i=0;i<16;i++)
{
if(ch[i]=='\n')
{ i++;
printf("%3d ",'\n');
}
if(ch[i]=='\0')
break;
printf("%3d ",ch[i]);
}
int k;
for(k=0;k<count;k++)
printf("\n");
}
fclose(file);
}
关于5303狄惟佳同学的myod程序设计的补充实现的更多相关文章
- 20155303狄惟佳预备作业三Linux学习笔记
20155303狄惟佳预备作业三Linux学习笔记 初次接触Ubuntu系统以及Linux内核,了解了其产生的历史,从感性来讲,深深吸引我的是其中蕴含的珍贵的开源精神,以及Stallman等人对&qu ...
- 201871010111-刘佳华《面向对象程序设计(java)》第十三周学习总结
201871010111-刘佳华<面向对象程序设计(java)>第十三周学习总结 实验十一 图形界面事件处理技术 实验时间 2019-11-22 第一部分:理论知识总结 1.事件源:能够产 ...
- 201871010111-刘佳华《面向对象程序设计(java)》课程学习总结
201871010111-刘佳华<面向对象程序设计(java)>课程学习总结 课程学习总结(45分) 经历了一个学期的<面向对象程序设计>课程学习,请每位同学完成以下任务: 点 ...
- 201871010111-刘佳华《面向对象程序设计(java)》第十四周学习总结
201871010111-刘佳华<面向对象程序设计(java)>第十四周学习总结 实验十二 Swing图形界面组件(一) 实验时间 2019-11-29 第一部分:基础知识总结 1.设计 ...
- 201871010111-刘佳华《面向对象程序设计(java)》第十五周学习总结
201871010111-刘佳华<面向对象程序设计(java)>第十五周学习总结 实验十三 Swing图形界面组件(二) 实验时间 2019-12-6 第一部分:理论知识总结 5> ...
- 201871010111-刘佳华《面向对象程序设计(java)》第十二周学习总结
201871010111-刘佳华<面向对象程序设计(java)>第十二周学习总结 实验十 集合与GUI初步 实验时间 2019-11-14 第一部分:基础知识总结 第九章知识总结 1. ...
- 201871010111-刘佳华《面向对象程序设计(java)》第十一周学习总结
201871010111-刘佳华<面向对象程序设计(java)>第十一周学习总结 实验九 泛型程序设计技术 实验时间 2019-11-8 1.实验目的与要求 (1) 理解泛型概念: (2 ...
- 201871010111-刘佳华《面向对象程序设计(java)》第十周学习总结
201871010111-刘佳华<面向对象程序设计(java)>第十周学习总结 实验八 异常.断言与日志 实验时间 2019-11-1 1.实验目的与要求 (1) 掌握java异常处理技术 ...
- 201871010111-刘佳华《面向对象程序设计(java)》第八周学习总结
201871010111-刘佳华<面向对象程序设计(java)>第八周学习总结 实验七 接口的定义与使用 实验时间 2019-10-18 第一部分:知识总结 接口的概念: ①java为了克 ...
随机推荐
- ThreadLocal原理
ThreadLocal类可以看作是当前线程的一个局部变量,只有当前线程可以访问,因此是线程安全的. ThreadLocal内部维护了一个ThreadLocalMap类,ThreadLocalMap是一 ...
- Autofac高级用法之动态代理
前言 Autofac的DynamicProxy来自老牌的Castle项目.DynamicProxy(以下称为动态代理)起作用主要是为我们的类生成一个代理类,这个代理类可以在我们调用原本类的方法之前,调 ...
- 【Luogu3455】【POI2007】ZAP-Queries(莫比乌斯反演)
[Luogu3455][POI2007]ZAP-Queries(莫比乌斯反演) 题面 题目描述 FGD正在破解一段密码,他需要回答很多类似的问题:对于给定的整数a,b和d,有多少正整数对x,y,满足x ...
- 锐动视频SDK在金融业务加密双录管理系统通用解决方案
为了更好地保障消费者的合法权益,银监会和保监会提出了要求,在银行.保险从业人员销售理财产品或代理其他机构销售产品时,同期进行录音录像,确保销售人员按程序.按规定介绍产品,以便购买者更清楚地了解产品的性 ...
- 通过Java WebService接口从服务端下载文件
一. 前言 本文讲述如何通过webservice接口,从服务端下载文件.报告到客户端.适用于跨系统间的文件交互,传输文件不大的情况(控制在几百M以内).对于这种情况搭建一个FTP环境,增加了系统部署的 ...
- javascript ES5、ES6的一些知识
ES6 标签(空格分隔): ES6 严格模式 "use strict" 注意:严格模式也有作用域,如果在某个函数内部声明的话,只在该函数内部有作用 1) 严格模式下全局变量声明必须 ...
- Java单例模式的5种实现方式
1.饿汉式.不支持并发: package com.ou; //饿汉式 public class Singleton1 { private Singleton1() { } private static ...
- asp.net中http接口的开发
第一篇博客,如有不足请大家多多谅解. 最近一段时间主导着一个app的开发.所有功能都交给后台接口进行处理.采用http,传输的数据类型为json. http接口是一种基于基于TCP.http服务的ap ...
- python 全栈开发,Day2(正式)
一.in的使用 in 操作符用于判断关键字是否存在于变量中 a = '男孩wusir' print('男孩' in a) 执行输出: True in是整体匹配,不会拆分匹配. a = '男孩wusir ...
- ER图
E-R图也称实体-联系图(Entity Relationship Diagram), 提供了表示实体类型.属性和联系的方法,用来描述现实世界的概念模型. 它是描述现实世界概念结构模型的有效方法.是表示 ...