我正在尝试在程序中获取带空格的字符串。
我尝试了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);
}
预期
生成客户......
给出名字:Alonso Gomez
成功攀登
3-Alonso gomez
实际
生成客户......
命名:成功上传
3-(打印大量空白字符串)
我正在研究gcc版本7.3.0(Ubuntu 7.3.0-27ubuntu1~18.04)
如果您想要阅读下一个换行符,可以使用例如
scanf("%[^\n]",xxx);
编辑:添加了有关最大字符的建议警告:
警告:这与gets()一样危险。你应该限制字符。
char xxx[32];
scanf("%31[^\n]",xxx);
更多细节可以在手册页scanf(3)中找到:
man 3 scanf