我正在尝试在程序中获取带空格的字符串。
我尝试了fgets(),getline(),但不等着使用用户的输入,得到不支持的内容,而scanf()可以用,但是我需要所有字符串
//我知道索引号不适用于两位数或两位以上的数字
void seller_new(){
printf("\nGenerando cliente...\n");
FILE *seller;
int index;
char name[30];
printf("Dar nombre: ");
fgets(name,30,stdin);
if(fopen("Vendedores.txt","r")==NULL || fgetc(fopen("Vendedores.txt","r"))==EOF){
seller=fopen("Vendedores.txt","w");
index=0;
fprintf(seller,"Clientes:%d\n",index);
}else{
seller=fopen("Vendedores.txt","r+");
fseek(seller,strlen("Clientes:"),SEEK_SET);
fscanf(seller,"%d",&index);
fseek(seller,strlen("Clientes:"),SEEK_SET);
fprintf(seller,"%d",index+1);
fseek(seller,0,SEEK_END);
}
printf("Subida exitosa\nNuevo: %d-%s\n",index,name);
fprintf(seller,"%d-%s\n",index,name);
fclose(seller);
sleep(3);
}
预期
Generando客户...
Dar nombre:阿隆索·戈麦斯
subida exitosa
3-阿隆索·戈麦斯
实际
Generando客户...
Dar nombre:subida exitosa
3-(打印大量的空白字符串)
我正在使用gcc版本7.3.0(Ubuntu 7.3.0-27ubuntu1〜18.04)
答案 0 :(得分:1)
如果您想阅读下一个换行符,可以使用例如
scanf("%[^\n]",xxx);
编辑:添加了有关最大字符数的建议警告:
警告:这很危险,例如gets()。您应该限制字符。
char xxx[32];
scanf("%31[^\n]",xxx);
更多详细信息可以在手册页scanf(3)中找到:
man 3 scanf