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语言通过指针数组和二维数组读取文件的更多相关文章

  1. c语言中如何通过二级指针来操作二维数组

    通过二级指针去访问二维数组需要先给二级指针分配等同于二维数组行数的一维数组指针,然后把二维数组的每行首地址赋值给对应位置的一维指针上.之后就可以通过二维指针直接访问了. 参考代码如下,可以看具体注释辅 ...

  2. c++指针数组与二维数组的最大区别

    下面随笔是关于指针数组说明及与二维数组的最大区别. 指针数组 数组的元素是指针型 例 利用指针数组存放矩阵 1 #include 2 using namespace std; 3 int main() ...

  3. c#简单实现二维数组和二维数组列表List&lt;&gt;的转置

    刚看到网上一篇文章里用sql实现了行列转置.sql server 2005/2008只用一个pivot函数就可以实现sql server 2000很多行的复杂实现.提到转置,立刻想起还在求学阶段曾经做 ...

  4. java基础5 (一维)数组和二维数组

    本文知识点(目录): 一维数组(一维数组的概念.优点.格式.定义.初始化.遍历.常见异常.内存分析以及常见操作(找最大值.选择排序.冒泡排序等等))    二维数组(二维数组的遍历.排序.查找.定义. ...

  5. C#的一维数组和二维数组定义方式:

    一维数组: //一维数组定义与初始化 ,, };//第一种方式 , , }; //第二种方式 int[] one3; //第三种方式 one3=,,}; 二维数组: //二维数组定义与初始化 //不规 ...

  6. C# 数组、一维数组、二维数组、多维数组、锯齿数组

    C#  数组.一维数组.二维数组.多维数组.锯齿数组 一.数组: 如果需要使用同一类型的对象,就可以使用数组,数组是一种数据结构,它可以包含同一类型的多个元素.它的长度是固定的,如长度未知的情况下,请 ...

  7. java - day005 - 数组工具类, 数组复制,二维数组,变量,方法, 面向对象

    1. java.util.Arrays  数组工具类    Arrays.toString (数组) 数组值链接字符串 Arrays.sort(数组) 基本类型: 优化的快速排序 引用类型: 优化的合 ...

  8. Java数组之二维数组

    Java中除了一维数组外,还有二维数组,三维数组等多维数组.本文以介绍二维数组来了解多维数组. 1.二维数组的基础 二维数组的定义:二维数组就是数组的数组,数组里的元素也是数组. 二维数组表示行列二维 ...

  9. JS中:数组和二维数组、MAP、Set和枚举的使用

    1.数组和二维数组:   方法一: var names = ['Michael', 'Bob', 'Tracy']; names[0];// 'Michael' 方法二: var mycars=new ...

  10. 二维数组,锯齿数组和集合 C# 一维数组、二维数组(矩形数组)、交错数组(锯齿数组)的使用 C# 数组、多维数组(矩形数组)、锯齿数组(交叉数组)

    二维数组,锯齿数组和集合 一.二维数组 二维数组:一维数组----豆角二维数组----表格 定义:1.一维数组:数据类型[] 数组变量名 = new 数据类型[数组长度];数据类型[] 数组变量名 = ...

随机推荐

  1. 开源框架 - 新 代码生成器 WebFirst / .NET Core

    框架描述 WebFirst  是一新代的 代码生成器,用法简单,功能强大,支持多种数据库 ,具体功能如下: 一. 建库.CodeFirst方式在线建表,没用到CodeFirst的用户可以用工具轻松体验 ...

  2. Stream之高级函数

    上回文说到了有关Stream一些数学函数的用法.今天来说下Stream一些高级的函数用法,这些函数在日常工作中也是必不可少的,测试数据还是引用上一篇的数据. Map 这个方法我个人称之为转换函数,把一 ...

  3. JDK源码阅读(3):AbstractStringBuilder、StringBuffer、StringBuilder类阅读笔记

    AbstractStringBuilder abstract class AbstractStringBuilder implements Appendable, CharSequence{ ... ...

  4. Ysoserial Commons Collections2分析

    Ysoserial Commons Collections2分析 About Commons Collections2 CC2与CC1不同在于CC2用的是Commons Collections4.0; ...

  5. 题解 CF555E Case of Computer Network

    题目传送门 题目大意 给出一个\(n\)个点\(m\)条边的无向图,有\(q\)次有向点对\((s,t)\),问是否存在一种方法定向每条边使得每个点对可以\(s\to t\). \(n,m,q\le ...

  6. python中的 * 和 ** 作用含义

    python中的 * 和 ** ,能够让函数支持任意数量的参数,它们在函数定义和调用中,有着不同的目的 一. 打包参数 * 的作用:在函数定义中,收集所有位置参数到一个新的元组,并将整个元组赋值给变量 ...

  7. PAT (Basic Level) Practice (中文)1025 反转链表 (25分)

    1025 反转链表 (25分) 给定一个常数 K 以及一个单链表 L,请编写程序将 L 中每 K 个结点反转.例如:给定 L 为 1→2→3→4→5→6,K 为 3,则输出应该为 3→2→1→6→5→ ...

  8. Mybatis初始化机制

    对于任何框架而言,在使用前都要进行一系列的初始化,MyBatis也不例外.本章将通过以下几点详细介绍MyBatis的初始化过程. 1.MyBatis的初始化做了什么 2. MyBatis基于XML配置 ...

  9. PyCharm永久破解方法,2021最新版本!!!

    1,下载破解补丁(已更新到2021.1版本): 关注微信公众号<程序员的时光>,回复破解补丁即可: 下载补丁文件 jetbrains-agent.jar 和importat.txt文件并将 ...

  10. Go 里的超时控制

    前言 日常开发中我们大概率会遇到超时控制的场景,比如一个批量耗时任务.网络请求等:一个良好的超时控制可以有效的避免一些问题(比如 goroutine 泄露.资源不释放等). Timer 在 go 中实 ...