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. 初探计算机网络之HTTPS请求

    ​ HTTPS自诞生以来,我们总是对它充满着很多的疑问,HTTPS到底是啥?HTTPS多出来的S指的是什么?HTTPS安全可靠吗?访问一个HTTPS的网站的流程等等,带着这些疑问,我们一起来揭开HTT ...

  2. Java基础之(十三):类与对象

    初识面向对象 面向对象 & 面向过程 面向过程思想 步骤清晰简单,第一步做什么,第二步做什么..... 面向过程适合处理一些较为简单的问题 面向对象思想 ​ 物以类聚,分类的思维模式,思考问题 ...

  3. bzoj3262陌上花开 (CDQ,BIT)

    题目大意 给定n朵花,每个花有三个属性,定义\(f[i]\)为满足\(a_j \le a_i\)且\(b_j \le b_i\)且\(c_j \le c_i\)的j的数量, 求\(d \in [0,n ...

  4. 重庆邮电大学第十一届ACM程序设计竞赛-网络选拔赛 C题

    1008: 偷袭 时间限制: 1.000 sec 内存限制: 128 MB 武林要以和为贵,张麻子不讲武德来偷袭马老师的亲传弟子. 马老师有n个亲传弟子,每个弟子有一个武力值a[i]. n个弟子中只有 ...

  5. Java(15)面向对象之继承

    作者:季沐测试笔记 原文地址:https://www.cnblogs.com/testero/p/15201615.html 博客主页:https://www.cnblogs.com/testero ...

  6. Rvalue References

    Rvalue References

  7. 重磅!微软发布 vscode.dev,把 VS Code 带入浏览器!

    早在 2019 年,当.dev顶级域名开放时,我们赶紧注册了vscode.dev.像许多购买.dev域名的人一样,我们不知道我们将用它做啥.反正,也占个坑吧! 将 VS Code 带入浏览器 直到今天 ...

  8. UltraSoft - Alpha - Scrum Meeting 1

    Date: Apr 06th, 2020. 会议内容为讨论功能规格书和技术规格书的撰写. Scrum 情况汇报 进度情况 组员 负责 昨日进度 后两日任务 CookieLau PM.后端 进行Djan ...

  9. GitHub Universe 2021|MS Reactor 邀你共聚年度盛会

    GitHub Universe 2021 将于2021年10月27-28日(PDT)在线直播,MS Reactor 将与 CSDN 合作进行转播,与你一同观看这场全球开发者盛会. 关于 GitHub ...

  10. LP-DDR 和其他 DDR

    一篇技術文檔比較 LP-DDR 和其他 DDR. 就觀念來說,LP-DDR 就是 Low Power 的 DDR:但就架構來說,LP-DDR 和其他 DDR 是截然不同的東西. 他們分屬不同的 JDE ...