没有一种方法可以获取字符串

时间:2019-04-19 18:42:35

标签: c

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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

警告:这很危险,例如gets()。您应该限制字符。

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

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

man 3 scanf