读书人

在C文件读取中怎样消去空格和回车?该如

发布时间: 2012-04-18 15:01:59 作者: rapoo

在C文件读取中怎样消去空格和回车?
文件中的内容
XXX 1201 安徽
XXX 1202 甘肃
XXX 1204 陕西
XXX 1203 广西
数据结构
struct Roommate{
char name[6];
char NO[8];
char addr[10];
}Rm[4];
核心代码
while(!feof(fp)){
fscanf(fp,"%s%s%s",Rm[i].name,Rm[i].NO,Rm[i].addr)
cout<<Rm[i].name<<" "<<Rm[i].NO<<" "<<Rm[i].addr<<endl;
}
这样读出来的结果是错的,请问scanf该怎样读取数据,使得它不受空格和回车的干扰?

[解决办法]
你说的不是scanf吧是fscanf吧。其实你可以读入的是“%s %s %s/n”也就是自己手动加上空格和回车就行了。
不过我没试过,我文件操作一直都是c++的方法,你试试看吧
[解决办法]
while(!feof(fp)){
fscanf(fp,"%s%s%s",Rm[i].name,Rm[i].NO,Rm[i].addr)
cout<<Rm[i].name<<" "<<Rm[i].NO<<" "<<Rm[i].addr<<endl;
}

错的太典型了。
[解决办法]
第一种方法:使用位域限制读取的长度
第二种:可以直接按照结构体来读写,实例代码如下:

C/C++ code
#include "stdafx.h"#include <cstdio>#include <cstdlib>#include <cstring>struct Roommate{char name[6];char NO[8];char addr[10];};int _tmain(int argc, _TCHAR* argv[]){    struct Roommate Rom[2] = {0};    FILE *file = NULL;    if(!(file = fopen("a.txt", "w"))) {        printf("Create File failed!\n");        exit(-1);    }    printf("Please input four times Roommate data: Name NO Addr\n");    for(int i=0; i<2; ++i) {        scanf("%s%s%s", Rom[0].name, Rom[0].NO, Rom[0].addr);        fwrite((const void *)&Rom[0], sizeof(struct Roommate), 1, file);    }    fclose(file);    /* Read  from file*/    file = NULL;    if(!(file = fopen("a.txt", "r"))) {        printf("Create File failed!\n");        exit(-1);    }    printf("Read from the file: Name NO Addr\n");    fread((void *)Rom, sizeof(struct Roommate), 2, file);    for(int i=0; i<2; ++i) {        printf("i=%d   Name:%s\tNO:%s\tAddr:%s\n", i, Rom[i].name, Rom[i].NO, Rom[i].addr);    }    fclose(file);    while(getchar()) ;    return 0;}
[解决办法]
fread()....
[解决办法]
探讨

while(!feof(fp)){
fscanf(fp,"%s%s%s",Rm[i].name,Rm[i].NO,Rm[i].addr)
cout<<Rm[i].name<<" "<<Rm[i].NO<<" "<<Rm[i].addr<<endl;
}

错的太典型了。

[解决办法]
不会是涉及到宽字符的问题了吧
[解决办法]
在while里面i不变行吗?
[解决办法]
处理字符串
[解决办法]
用fgets就好使了。。然后就将最后一位的\n至零就是了

读书人网 >C语言

热点推荐