【发布时间】:2017-09-02 14:03:37
【问题描述】:
早安,
所以目前我有这个文件并包含:实际文件是这样的
1,name A. lname2,Das F. Esd3,Frsas A. Casdfre4,Rsadna P. Tsdaas5,Asadla C. Toasdtino6,Aasdel P. Gasdla7,Masda Isable A. Milasdroso8,Niasdkie T. Niasdemus9,Evasdn A. Vasdueva10,Geasdlyn C. Iasdncio11,Aasdr Leasdma12,Neasdio A. Maasdbale
我无法输出,这是我当前的代码
printf("\nID\tName\n");
while(fscanf(load, "%[^,],%[^1-9]", faculty[counter].id, faculty[counter].name)!=EOF) {
printf("%s\t%s", faculty[counter].id, faculty[counter].name);
输出是这样的:
ID Name
1 asdasd
2 asdas
3 asdsad4 othername
5 asdsad
6 asdasda
7 sdfsdf
8 sadsad
9 asdsad
10 asdas
11 asdsad12 asdas
4,12 has invalid position.
输出应该是一个范围:
1 ID Name
1 asdasd
2 asdas
3 asdsad
4 othername
5 asdsad
6 asdasda
7 sdfsdf
8 sadsad
9 asdsad
10 asdas
11 asdsad
12 asdas
可能是什么问题?这是我第一次使用这样的分隔符,你能解释一下有什么问题吗?谢谢!
【问题讨论】:
-
请对代码块、输出和文件内容使用正确的格式。 @Someprogrammerdude 试图修复它,但您的编辑将其改回。 Eimantas 应用的最新修复。
-
代码已修复,抱歉
-
你在
fscanf中使用正则表达式;这是不正确的,它只理解格式字符串。 -
如果你想稳健地读取这样的输入,使用
fscanf,这可能非常非常困难,尤其是如果输入有奇怪的皱纹,或者如果你想优雅地处理输入错误。一般来说,使用(f)scanf以外的技术读取输入要容易得多(从长远来看)。起初这似乎更难,因为*f)scanf似乎 非常方便,而且这是所有入门教科书向您展示的,好像它是进行输入的 方式。但事实并非如此,您越早了解其他技术并放弃(f)scanf,您作为 C 程序员就会越快乐、越高效。 -
@HennoBrandsma 实际上,
scanf系列确实支持非常有限的类似正则表达式的功能,使用%[...]说明符,如显示。