从c上的键盘输入字符

标签 c input char printf

我的程序做的一切都是正确的,但是程序没有询问用户任何事情,并且跳过了函数中的所有内容,你能看出哪里出了问题吗?所有功能都正常工作,因为它会打印“您确定要购买吗?”

我已经尝试将 printf 移到函数中,但它仍然出现在屏幕中,所以它是在它后面的东西。

void shopBuy (){
    char input [50];
    char nameprice [80];
    char price [5];
    char myMoney [100];
    int money=0,mymoney;
    printf("What do you want to buy?\n");
    scanf("%s",&input);
    getPrice(nameprice,input);
    last3(nameprice,price);
    money=atoi(price);
    printf("It costs: $%d\n",money);
    FILE *fp;
    fp = fopen("money.txt", "r");   
    fgets(myMoney, 80, (FILE*)fp);
    fclose(fp);
    mymoney=atoi(myMoney);
    if (mymoney>money)
    {
        printf("Are you sure you want to buy?(y/n)\n");
        acceptBuy(mymoney,money);
    }
    else{
        denyBuy();
    }
}

void acceptBuy(int m,int p){
    int afterbuy;
    char a;
    char afterbuyString [100];
    scanf("%c",&a);
    if(a=='y'||a=='Y'){
        afterbuy=m-p;
        itoa(afterbuy,afterbuyString,10);
        FILE *fp;
        fp = fopen("money.txt", "w+");
        fprintf(fp, afterbuyString);
        fprintf(fp, "\n");
        fclose(fp);
    }
}

int main(void){
    shopBuy();
    return 0;
}

最佳答案

正如“user3121023”所说,它需要“%c”后面的空格。

所以函数是:

void acceptBuy(int m,int p){
    int afterbuy;
    char a;
    char afterbuyString [100];
    scanf(" %c",&a); // note the space.
    if(a=='y'||a=='Y'){
        afterbuy=m-p;
        itoa(afterbuy,afterbuyString,10);
        FILE *fp;
        fp = fopen("money.txt", "w+");
        fprintf(fp, afterbuyString);
        fprintf(fp, "\n");
        fclose(fp);
    }
}

关于从c上的键盘输入字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36973616/

相关文章:

c - Minix 3 TTY传入字符转int

javascript - 只允许数字和字母输入字符串

c : How to signal end of input

c++ - 如何在 C++ 中修复从字符串常量到 'char*' 的警告弃用转换?

c# - 将字符串转换为字 rune 本框

c - flex 无法识别字符范围

c - 在结构的末尾添加 'structure identifier' 是多余的吗?它有什么用?

c++ - QtCreator CMake 项目 - 如何显示所有项目文件

html - <input> 标签不在 Safari 中呈现?

可变长度的字符