获取字符串的方法没有工作[关闭]

问题描述 投票:-7回答:1

我正在尝试在程序中获取带空格的字符串。

我尝试了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)

c
1个回答
1
投票

如果您想要阅读下一个换行符,可以使用例如

scanf("%[^\n]",xxx);

编辑:添加了有关最大字符的建议警告:

警告:这与gets()一样危险。你应该限制字符。

char xxx[32];
scanf("%31[^\n]",xxx);

更多细节可以在手册页scanf(3)中找到:

man 3 scanf
© www.soinside.com 2019 - 2024. All rights reserved.