我正在尝试从文件寄存器加载结构。当我尝试扫描字符时,我得到一个空格。文件寄存器的格式如下:
账户号码(字符8)代码(字符1)余额( float 9位2小数)
示例:
AAAA1111 C 500000,05
当我尝试获取该示例注册时,我得到:
AAAA1111 500000,05
typedef struct{
char accountNum[8];
char cod;
float balance;
}t_regMov;
void loadStruct(char *line,t_regMov *mov){
char *aux=line;
aux=strchr(line,'\n');
*aux='\0';
aux-=9;
sscanf(aux,"%f",&mov->balance);
aux-=1;
*aux='\0';
aux-=1;
sscanf(aux,"%c",&mov->cod);
aux-=1;
*aux='\0';
sscanf(line,"%s",mov->accountNum);
}
int main(){
FILE *movf=fopen("movements.txt","r+");
if(!movf)exit(1);
t_regMov mov;
char line[100];
fgets(line,sizeof(line),movf);
while(!feof(movf)){
loadStruct(line,&mov);
printf("%s %c %f\n",mov.accountNum,mov.cod,mov.balance)
fgets(line,sizeof(line),movf);
}
fclose(movf);
}
最佳答案
这是一个解析您想要的行的简化示例。
#include <stdio.h>
#include <string.h>
int main() {
int left, right;
char *accountNumber;
char cod;
sscanf("AAAA1111 C 500000,05", "%8s %c %d,%d", accountNumber, &cod,&left, &right);
printf("Account: %s\nCode: %c\nBalance: %d,%d\n", accountNumber, cod, left, right);
}
最大的变化是,在 sscanf
中,您可以指定字符串缓冲区的最大字符数。就像上面的注释一样,您需要为字符串分配适量的空间(空终止和所有)。
关于c - 使用 sscanf 读取字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45002918/