C语言通过指针数组和二维数组读取文件
1 # include <stdio.h>
2 # include <stdlib.h>
3 # include <time.h>
4 # include <string.h>
5 int main ()
6 {
7 int _rand (int x);
8 int z,m;
9 char p;
10
11 char *q[100]={0};
12
13 int a[100];
14 FILE *fp = fopen ("name.txt","a+");
15 if (fp == NULL)
16 {
17 printf ("文件打开失败");
18 exit(1);
19 }
20 p = getc (fp);
21 if (p == EOF)
22 {
23 fseek (fp,0l,SEEK_SET);
24 z = 0;
25 printf ("文件中没有数据,或者数据没有按照规定格式输入!\n请输入:");
26 printf ("输入格式为n,姓名(ps:ctrl+z结束输入)\n");
27 while (scanf ("%d %s",&a[z],*q+z) != EOF)
28 {
29 fprintf (fp,"%d %s\n",a[z],*q+z);
30 z++;
31 }
32 }
33 else
34 {
35 fseek (fp,0l,SEEK_SET);
36 z = 0;
37 q[z]=(char *)malloc(100);
38 while (EOF != fscanf (fp,"%d %s",&a[z],q[z]))
39 {
40
41 printf ("%d %s\n",a[z],q[z]);
42 z++;
43 q[z]=(char *)malloc(100);
44 }
45 }
46 for (m = 0;m < z;m++)
47 {
48 printf ("%d %s\n",a[m],q[m]);
49 }
50 for (m = 0;m < z;m++)
51 {
52 free(q[m]);
53 }
54
55 m = _rand (z);
56 //printf ("%d %s",a[m],q+m);
57 }
58 int _rand (int x)
59 {
60 int a = 0;
61 srand (time(NULL));
62 srand (rand());
63 a = (rand()%x);
64 printf ("%d ",a);
65 return a;
66 }
name.txt
1 不是你
2 还是你
3 到底是不是你
1 # include <stdio.h>
2 # include <stdlib.h>
3 # include <time.h>
4 # include <string.h>
5 int main ()
6 {
7 int _rand (int x);
8 int z,m;
9 char p;
10
11 char q[20][100];
12 int a[100];
13 FILE *fp = fopen ("name.txt","a+");
14 if (fp == NULL)
15 {
16 printf ("文件打开失败");
17 exit(1);
18 }
19 p = getc (fp);
20 if (p == EOF)
21 {
22 fseek (fp,0l,SEEK_SET);
23 z = 0;
24 printf ("文件中没有数据,或者数据没有按照规定格式输入!\n请输入:");
25 printf ("输入格式为n,姓名(ps:ctrl+z结束输入)\n");
26 while (scanf ("%d %s",&a[z],q+z) != EOF)
27 {
28 fprintf (fp,"%d %s\n",a[z],q+z);
29 z++;
30 }
31 }
32 else
33 {
34 fseek (fp,0l,SEEK_SET);
35 z = 0;
36 while(!feof(fp))
37 {
38 fscanf (fp,"%d %s",&a[z],q+z);
39 z++;
40 }
41 /*while (EOF != fscanf (fp,"%d %s",&a[z],q+z))
42 {
43 printf ("%d %s\n",a[z],q+z);
44 z++;
45 }*/
46 }
47 for (m = 0;m < z;m++)
48 {
49 printf ("%d %s\n",a[m],q+m);
50 }
51 m = _rand (z);
52 //printf ("%d %s",a[m],q+m);
53 }
54 int _rand (int x)
55 {
56 int a = 0;
57 srand (time(NULL));
58 srand (rand());
59 a = (rand()%x);
60 printf ("%d ",a);
61 return a;
62 }
name.txt
1 不是你
2 还是你
3 到底是不是你
指针地址都是由操作系统分配的,不可以自己随意制定。
先用malloc函数分配一个足够大的内存空间,然后用scanf函数输入内容,不用这些空间后最好用free函数释放。部分代码
#include <stdlib.h> /* 使用malloc和free函数需要这个头文件 */
char *a[3];
a[0]=(char *)malloc(100); /* 算上结尾的\0,不超过100个字符 */
scanf("%s", a[0]);
free(a[0]); /* 使用解释后释放 */
C语言教材讲指针的部分有讲解。
*****************************
利用指针数组对字符串排序的程序如下:
void SortString(int n, char *str[])
{
char *c;
int i,j;
for(i=0;i<=n-2;i++)
for(j=0;j<=n-2-i;j++)
{
if(strcmp(str[j],str[j+1])>0)
{c=str[j];str[j]=str[j+1];str[j+1]=c;}
}
}
main()
{
int i;
char *lang[]={"China","France","English"};
SortString(3,lang);
for(i=0;i<3;i++)
printf("\n%s ", lang[i]);
}
程序运行的结果为:
China
English
France
排 序前后指针数组的内存示意图如下。排序前lang[0],lang[1]和lang[2]保存的地址分别为"China","France" 和 "English"的首地址。排序结束后,3个字符串的内存情况没有发生变化,但指针数组里保存的指针顺序发生了变化:lang[1]指向 了"English",lang[2]指向了" France "。
C语言通过指针数组和二维数组读取文件的更多相关文章
- c语言中如何通过二级指针来操作二维数组
通过二级指针去访问二维数组需要先给二级指针分配等同于二维数组行数的一维数组指针,然后把二维数组的每行首地址赋值给对应位置的一维指针上.之后就可以通过二维指针直接访问了. 参考代码如下,可以看具体注释辅 ...
- c++指针数组与二维数组的最大区别
下面随笔是关于指针数组说明及与二维数组的最大区别. 指针数组 数组的元素是指针型 例 利用指针数组存放矩阵 1 #include 2 using namespace std; 3 int main() ...
- c#简单实现二维数组和二维数组列表List<>的转置
刚看到网上一篇文章里用sql实现了行列转置.sql server 2005/2008只用一个pivot函数就可以实现sql server 2000很多行的复杂实现.提到转置,立刻想起还在求学阶段曾经做 ...
- java基础5 (一维)数组和二维数组
本文知识点(目录): 一维数组(一维数组的概念.优点.格式.定义.初始化.遍历.常见异常.内存分析以及常见操作(找最大值.选择排序.冒泡排序等等)) 二维数组(二维数组的遍历.排序.查找.定义. ...
- C#的一维数组和二维数组定义方式:
一维数组: //一维数组定义与初始化 ,, };//第一种方式 , , }; //第二种方式 int[] one3; //第三种方式 one3=,,}; 二维数组: //二维数组定义与初始化 //不规 ...
- C# 数组、一维数组、二维数组、多维数组、锯齿数组
C# 数组.一维数组.二维数组.多维数组.锯齿数组 一.数组: 如果需要使用同一类型的对象,就可以使用数组,数组是一种数据结构,它可以包含同一类型的多个元素.它的长度是固定的,如长度未知的情况下,请 ...
- java - day005 - 数组工具类, 数组复制,二维数组,变量,方法, 面向对象
1. java.util.Arrays 数组工具类 Arrays.toString (数组) 数组值链接字符串 Arrays.sort(数组) 基本类型: 优化的快速排序 引用类型: 优化的合 ...
- Java数组之二维数组
Java中除了一维数组外,还有二维数组,三维数组等多维数组.本文以介绍二维数组来了解多维数组. 1.二维数组的基础 二维数组的定义:二维数组就是数组的数组,数组里的元素也是数组. 二维数组表示行列二维 ...
- JS中:数组和二维数组、MAP、Set和枚举的使用
1.数组和二维数组: 方法一: var names = ['Michael', 'Bob', 'Tracy']; names[0];// 'Michael' 方法二: var mycars=new ...
- 二维数组,锯齿数组和集合 C# 一维数组、二维数组(矩形数组)、交错数组(锯齿数组)的使用 C# 数组、多维数组(矩形数组)、锯齿数组(交叉数组)
二维数组,锯齿数组和集合 一.二维数组 二维数组:一维数组----豆角二维数组----表格 定义:1.一维数组:数据类型[] 数组变量名 = new 数据类型[数组长度];数据类型[] 数组变量名 = ...
随机推荐
- 学习Tomcat(六)之类加载器
通过前面的文章我们知道,Tomcat的请求最终都会交给用户配置的servlet实例来处理.Servlet类是配置在配置文件中的,这就需要类加载器对Servlet类进行加载.Tomcat容器自定义了类加 ...
- Tracking Analyst Tools(Tracking Analyst 工具)
Tracking Analyst 工具 # Process: 创建追踪图层 arcpy.MakeTrackingLayer_ta("", 输出图层, "NO_TIME_Z ...
- 2021.3.3--vj补题
题目 C - C CodeForces - 1166C The legend of the foundation of Vectorland talks of two integers xx and ...
- Mybatis一级缓存的锅
问题背景 项目开发中有一个树形数据结构,不像经典组织结构树.菜单级别树,我们这个树形结构是用户后期手动建立起来的关系.因此数据库表结构为两张表:数据记录表.记录关系表,通过业务规则限制,形成的树形结构 ...
- python 类方法 静态方法
属性: 公有属性 (属于类,每个类一份) 普通属性 (属于对象,每个对象一份) 私有属性 (属于对象,跟普通属性相似,只是不能通过对象直接访问) 方法:(按作用) 构造方法 析构函数 方法: ...
- js--Symbol 符号基本数据类型
前言 ECMAScript 6 中新增了 Symbol 符号这一基本数据类型,那么Symbol 是用来干什么的,对开发又有什么帮助呢?本文来总结记录一下 Symbol 的相关知识点. 正文 Symbo ...
- python streamlit 速成web页面,深度学习模型展示.
# 点我查看 参考文献 py中一个web应用,Streamlit 是一个开源 Python 库,可让您轻松创建和共享用于机器学习和数据科学的精美自定义 Web 应用程序.只需几分钟,您就可以构建和部 ...
- 【二食堂】Alpha - Scrum Meeting 5
Scrum Meeting 5 例会时间:4.15 12:30 - 13:00 进度情况 组员 昨日进度 今日任务 李健 1. 主页搭建结束issue2. 与后端协商确定接口的设计3. 查找文本区域功 ...
- 2021.9.14考试总结[NOIP模拟53]
T1 ZYB和售货机 容易发现把每个物品都买成$1$是没有影响的. 然后考虑最后一个物品的方案,如果从$f_i$向$i$连边,发现每个点有一个出度多个入度,可以先默认每个物品都能买且最大获利,这样可以 ...
- Python爬虫之爬取淘女郎照片示例详解
这篇文章主要介绍了Python爬虫之爬取淘女郎照片示例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 本篇目标 抓取淘宝MM ...