【发布时间】:2018-04-20 09:38:28
【问题描述】:
我正在那里进行 Socket 编程,我需要读取一个文本文件,然后我需要使用制表符空间拆分该文本文件,然后我需要将每一列分配给一个定义的数组。
但在我的代码中所有字段都是正确的,除了价格列我的价格数组总是返回 0
如何解决?
数组声明代码
int id[10];
char name[10][50];
int qrty[10];
double price[10];
以下代码是拆分文本文件并将值分配给创建的数组
while (fgets(line, sizeof(line), fp)){
sscanf(line,"%d\t%[^\t]\t%d\t%f",&pno,&pname,&qty,&uprice);
Writen(sockfd,line,strlen(line));
id[x]=pno;
strncpy(name[x], pname, 50);
qrty[x]=qty;
price[x]=uprice;
x++;
}
我的文本文件如下
001 Coffee maker 10 3000.00
002 Pressure cooker 4 7000.00
003 Blender 10 2500.00
004 Pillow 10 300.00
005 Camera 5 25000.00
006 Washer 5 25000.00
007 Headphone 3 5000.00
008 Mattresses 5 6000.00
009 Heater 3 1000.00
010 Cookware 2 10000.00
【问题讨论】:
-
格式字符串中括号 (
[) 前缺少% -
您确定拨打
sscanf有效吗?你不检查它的返回值。 -
什么是
pno、pname、qty、uprice?请提供minimal reproducible example。 -
虽然我把 % 它不工作而 sscanf 工作
-
顺便说一句,
%[^\t]与%s完全一样,在“讨厌的”输入数据上保证缓冲区溢出——总是使用字段宽度转换为字符串。根据您的line的最大大小,这可能不是问题.. 无论如何都要这样做:) 有什么理由不只使用"%d %49s %d %f"?允许任何空格作为分隔符会更加灵活。