我有多行字符串,我想以以下形式存储它:
string1 string2 float1 float2 float3 float4 float5 float6
,如下面提到的转换说明符所示。例如:
Kevlar ABS 43.42 13.94 1.35 0.35 0.112 2.74
两个字符串是Kevlar和ABS,其余6个是数字。所有这8个字符之间都有空格字符。
我想知道如何仅使用扫描集或(否定的)字符类在所有8个转换说明符中存储所需的信息。
该结构声明如下:
struct lamina
{
char lamina_fiber[30];
char lamina_matrix[30];
float E1,E2,p,v12,v21,G12;
struct lamina *nextnode;
};
head=(struct lamina *)calloc(1,sizeof(struct lamina));
current=head;
for(int i=1;i<=index_elements;i++)
{
sscanf(rows[i],"%s %s %f %f %f %f %f %f",
current->lamina_fiber,current->lamina_matrix,¤t->E1,
¤t->E2,¤t->p,¤t->v12,¤t->v21,
¤t->G12);
current->nextnode=(struct lamina *)calloc(1,sizeof(struct lamina));
current=current->nextnode;
}
current=head;
for(int i=1;i<=index_elements;i++)
{
printf("%s %s %f %f %f %f %f %f", current->lamina_fiber, current->lamina_matrix,
current->E1, current->E2,current->p, current->v12,
current->v21, current->G12);
current=current->nextnode;
}
注意:问题中的代码的第1版:
if(n=(sscanf(rows[i],"%s %s %5.2f %5.2f %5.2f %5.2f %5.2f %5.2f",
current->lamina_fiber,current->lamina_matrix,¤t->E1,
¤t->E2,¤t->p,¤t->v12,¤t->v21,¤t->G12))!=8);
这解释了对if
的引用以及答案中的后跟分号。
答案 0 :(得分:1)
条件语句有两个问题。您的状况,
@RequestMapping(value = "/carSave", method = RequestMethod.POST)
public ModelAndView doHomeSave(@RequestParam("carID") String carID,
@RequestParam("culoarea") String culoarea,
@RequestParam("model") String model,
@RequestParam("combustibil") String combustibil,
@RequestParam("categoria") String categoria,
@RequestParam("data_inregistrarii")
// Add this format
@DateTimeFormat(iso = ISO.DATE) LocalDate data_inregistrarii) {
// code here
}
看起来它为n=(sscanf(rows[i],"%s %s %5.2f %5.2f %5.2f %5.2f %5.2f %5.2f",
current->lamina_fiber,current->lamina_matrix,¤t->E1,
¤t->E2,¤t->p,¤t->v12,¤t->v21,¤t->G12))!=8
分配了sscanf
(应该为8)的返回值,然后检查该返回值是否应为8。但实际上,它还有其他作用:它将条件的结果分配给n
n
应为(sscanf(rows[i],"%s %s %5.2f %5.2f %5.2f %5.2f %5.2f %5.2f",
current->lamina_fiber,current->lamina_matrix,¤t->E1,
¤t->E2,¤t->p,¤t->v12,¤t->v21,¤t->G12))!=8
,或者由于true
是整数1。
下一个问题是您的n
条件以if
结尾,因此没有任何事情可以完成或不依赖它。您的程序仅继续执行以下两个语句:第一次打印
问题!n = 1
,然后打印原始输入字符串;
。