C语言如何读取一行数据,以空格分开

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言如何读取一行数据,以空格分开相关的知识,希望对你有一定的参考价值。

有这么一个文本文件 stu.txt,内容如下:
10001 杨松 1982-02-08
10002 张三 1982-03-08
10003 李四 1980-04-01
10004 王五 1986-06-10
10005 朱六 1982-03-04
要求只能用c语言(不能用C++ 的fstream类库),读取这些数据,存放在结构体:
typedef struct _STUDENT_
char stuID[6];
char name[12];
char birthday[12];
Student数组里,
C++可以用istringstream stream(line);//line是一行
再stream>>word;//word是存放单词
这个stream可以将一行以空格分开,再三次输入word放在结构体的三个成员里,
可是C语言没有这样的函数,像fgets,fscanf之类的都是一次只能读取定长的字符,使用非常不便,怎么样才能以空格分开读取这类文件呢?请高手指教。

可以使用strtok函数做分割单词。

#include<string.h>

voidmain()

chars[]="192.168.0.26";

char*delim=".";

char*p;

printf("%s",strtok(s,delim));

while((p=strtok(NULL,delim)))

printf("%s",p);

printf("\\n");

扩展资料

在C++中strtok的使用

#include<iostream>

#include<cstring>

usingnamespacestd;

intmain()

charsentence[]="Thisisasentencewith7tokens";

cout<<"Thestringtobetokenizedis:\\n"<<sentence<<"\\n\\nThetokensare:\\n\\n";

char*tokenPtr=strtok(sentence,"");

while(tokenPtr!=NULL)

cout<<tokenPtr<<endl;

tokenPtr=strtok(NULL,"");

//cout<<"Afterstrtok,sentence="<<tokenPtr<<endl;

return0;

参考技术A

方法和详细的操作步骤如下:

1、第一步,定义一个常量以控制字符串的长度,见下图,转到下面的步骤。

2、第二步,完成上述步骤后,定义两个数组以保存字符和最短的单词,见下图,转到下面的步骤。

3、第三步,完成上述步骤后,在不等于句号的情况下,使用do-while循环控制系统输入文章,见下图,转到下面的步骤。

4、第四步,完成上述步骤后,选取文章中的字符,并将其保存在数组中,见下图,转到下面的步骤。

5、第五步,完成上述步骤后,如果条件小于或等于1,请使用for循环控制获取文章中的最短单词,见下图,转到下面的步骤。

6、第六步,完成上述步骤后,使用if语句确定其是一个空格还是一个句点,并获得一个单词,见下图,转到下面的步骤。

7、第七步,完成上述步骤后,获取最短的单词并将其保存在数组单词中。
 运行该程序并输入以点号结尾的英文文章,计算机将输出最短的单词和单词长度,见下图。这样,就解决了这个问题了。

参考技术B 写一个函数判断读到的字符是不是空格(空格的ascii码是32) 参考技术C 这是读取空格的一个程序你看看吧!
#include <iostream>
#include <fstream>

using namespace std;

int main()

char asd;
char abc;
ifstream inIfstream("in.txt");
ofstream outOfstream("out.txt");

while ( inIfstream.read(&asd, 1) )

if ( ( asd >= 'A' && asd <= 'Z' ) || ( asd >= 'a' && asd <= 'z' ) || ( asd == ' ' ) )

abc = asd;

cout << abc;
outOfstream << abc;



return 0;
参考技术D 可以这样试试。
#include <stdio.h>
#include <string.h>
#include <memory.h>

typedef struct _STUDENT_

char stuID[6];
char name[12];
char birthday[12];
Student;

void main()

Student stud[50];
char line[31], *start, *end;
int i = 0, j;
FILE *fp = fopen("data.txt", "r");
memset(stud, 0, sizeof(stud));
if (fp == NULL)

puts("Can not open file!");
return;


while (fgets(line, 31, fp))

start = end = line;
while (*end++ != ' ');

strncpy(stud[i].stuID, start, end - 1 - start);
start = end;
while (*end++ != ' ');
strncpy(stud[i].name, start, end - 1 - start);
strcpy(stud[i].birthday, end);
++i;


for (j=0; j < i; ++j)

printf("%s ", stud[j].stuID);
printf("%s ", stud[j].name);
printf("%s", stud[j].birthday);
putchar('\n');


fclose(fp);

以上是关于C语言如何读取一行数据,以空格分开的主要内容,如果未能解决你的问题,请参考以下文章

C语言 一行数据 空格分隔

c语言:输入一行字符,统计其中的单词个数,单词之间用空格分开

[C语言]输入一行整数,用空格分开,回车结束。

C语言怎样将数字从文件里逐个读取出来

c语言如何计算n行字符串的长度?

求c语言高手,ASCII码排序