C 用逗号'读取文本文件;s
我试图使用fscanf从infle(stdin或文件)读入表示如下的文件:C 用逗号'读取文本文件;s,c,C,我试图使用fscanf从infle(stdin或文件)读入表示如下的文件: 1,2,3 4,5,6 请忽略它们是数字这一事实——我将它们表示为字符串 我所做的就是使用 fscanf(infile, "%s%*c %s%*c %s%*c[^\n]", x, y, z); where x, y, z are string variables. 我希望该行上的每个表示数字都存储在x,y,z中,但它不起作用,而是将整行单独存储在x中 需要帮忙吗?谢谢。您使用的是“%s”,它可以将整个单词读到空格。
1,2,3
4,5,6
请忽略它们是数字这一事实——我将它们表示为字符串
我所做的就是使用
fscanf(infile, "%s%*c %s%*c %s%*c[^\n]", x, y, z); where x, y, z are string variables.
我希望该行上的每个表示数字都存储在x,y,z中,但它不起作用,而是将整行单独存储在x中
需要帮忙吗?谢谢。您使用的是“%s”,它可以将整个单词读到空格。因此,在第一行的
x
中读取1,2,3
您需要做的是将x
、y
和z
作为整数,然后您可以读取三个整数并使用多种方法将其转换为字符串(例如itoa
int x,y,z;
char x_str[20], y_str[20], z_str[20];
//...
fscanf(infile, "%d,%d,%d", x, y, z);
itoa{x,x_str,10); // and so on
如果您必须使用scanf
/fscanf
,那么您希望使用%[^,]
作为输入格式化程序,而不是%s
%s
将贪婪地读取尽可能多的内容;%[^,]
将读取由非,
的字符(包括空格)组成的字符串:
fscanf(infile, "%[^,],%[^,],%[^,]", x, y, z);
请注意,fscanf
的上述用法是不安全的,因为它无法限制读取到每个字符串中的字符数。因此,它完全容易受到缓冲区溢出攻击
就我个人而言,我会用
fgets
(或者getline
,如果有的话)阅读整行内容然后在,
上用strtok
标记它,这通常是应该避免的。有很多o行工具来检查正则表达式:@Asafscanf
不使用正则表达式。你最好用fgets
(或者getline
,如果有的话)并使用strtok
scanf
(和fscanf
)对其进行标记化是出了名的难以正确使用。很遗憾,我必须使用fscanf或scanf!@jamesdli…我忽略了scanf部分。也许他应该将扫描f的结果存储在一个数组中,然后测试字符串是否通过正则表达式测试…但正则表达式似乎有问题,没有失去泛化z是ac实际上是一个字符串,它是一个由单词和数字组成的字符串。在这种情况下,您可以使用fscanf(infle,“%d,%s”,x,y,z_str);
来读取文件的一行。z_str
是一个字符串,可以直接读取。如果它是OP(x,y,z\n)的格式,您可能需要类似于“%[^,],%[^,],%[^,],%[^\n]”
,可能在逗号后加空格。我想这正好说明了你的观点:)