为什么在scanf()之后此指针的默认值变为10?

别处

这个小测试有助于查明我的程序中的问题。现在发生了一件奇怪的事情:第三条也是最后scanf()一条被跳过了,紧随其后的测试行将打印出10的值cBoard[*tile]

void takeTurn(int *iap, int *tile, char *cap) {
    printf("\n\tPRINT TEST Take Turn()\n");

    if (*iap == 1) *cap == 'X';
    if (*iap == 2) *cap == 'O';

    printf("\nWhich tile would you like?");
    printf("\n\tTEST the value of cBoard[0] is %c. At [3] is %c.\n1  ::", cBoard[0], cBoard[3]);
    scanf("%c", &cBoard[0]);

        //user inputs 'h'. 

    printf("\n\tTEST the value of cBoard[0] is now %c\n2  ::", cBoard[0]);
    scanf("%d", tile);

        //it prints
        //TEST the value of cBoard[0] is now h
        //user inputs 6. It prints

    printf("\n\tTEST the value of cBoard[%d] is %d.\n3  ::", *tile, cBoard[*tile]+1);

        //it prints
        //TEST the value of cBoard[6] is 1. 

        scanf("%c", &cBoard[*tile]);

        //This scanf() does not run. 

    printf("\n\tTEST the value of cBoard[%d] is %d.\n", *tile, cBoard[*tile]);

        //it prints
        //TEST the value of cBoard[6] is 10.

    ...
}

cBoard[6]不管先前的分配是什么,最终的打印结果都会返回10。关于功能不正常的某些原因scanf()必须将新值设置为10。

到底是怎么回事?

chqrlie

scanf("%d", tile);读取一个数字,但将其保留'\n'在标准输入缓冲区中。下一个读取操作scanf("%c", &cBoard[*tile]);将读取此字符,该字符恰好具有10ASCII您可以通过忽略字符前面的空格来解决此问题:

scanf(" %c", &cBoard[*tile]);  // notice the space before the %c

还要注意,您应该检查返回值scanf以验证是否提供了正确的输入。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么我无法获取此输入元素的默认值?

来自分类Dev

Java:为什么通过将子级保存为父级,子类的属性变为父类的默认值?

来自分类Dev

为什么需要默认值呢?

来自分类Dev

为什么nullglob不是默认值?

来自分类Dev

为什么具有单个参数值的函数之后必须为每个参数指定默认值?

来自分类Dev

为什么使用指针而不是直接实例化对象时不使用类成员的默认值?

来自分类Dev

为什么在实现中允许使用与在接口上定义的默认值不同的默认值?

来自分类Dev

为什么RandomForestClassifier中的max_features的默认值与RandomForestRegressor中的默认值不同?

来自分类Dev

为什么在访问结构时需要默认值?

来自分类Dev

Java:为什么未使用XX:SurvivorRatio的默认值?

来自分类Dev

为什么要推动匹配Git中的默认值?

来自分类Dev

为什么out参数没有默认值?

来自分类Dev

使用:=时,为什么with = TRUE是默认值?

来自分类Dev

为什么我的argparse不显示默认值?

来自分类Dev

为什么我的DropDownListFor的默认值无法正常工作?

来自分类Dev

TEXT列的MySQL默认值行为异常,为什么?

来自分类Dev

为什么constexpr不是所有函数的默认值?

来自分类Dev

为什么constexpr不能只是默认值?

来自分类Dev

为什么FreezeGun不使用SQLAlchemy默认值?

来自分类Dev

为什么Mockito verifyNoMoreInteractions的Scala默认值有问题

来自分类Dev

为什么可选参数的默认值必须为常数?

来自分类Dev

为什么打印屏幕采用默认值

来自分类Dev

为什么`ffmpeg`的`-hide_banner`不是默认值?

来自分类Dev

为什么需要“-人类可读”而不是默认值?

来自分类Dev

express-locale始终返回默认值-为什么?

来自分类Dev

为什么 <value>!0</value> 匹配默认值 0?

来自分类Dev

为什么在注释中禁止 null 作为默认值?

来自分类Dev

为什么可迭代指针变为NULL?

来自分类Dev

为什么此asm代码未将指针指向的值加倍

Related 相关文章

  1. 1

    为什么我无法获取此输入元素的默认值?

  2. 2

    Java:为什么通过将子级保存为父级,子类的属性变为父类的默认值?

  3. 3

    为什么需要默认值呢?

  4. 4

    为什么nullglob不是默认值?

  5. 5

    为什么具有单个参数值的函数之后必须为每个参数指定默认值?

  6. 6

    为什么使用指针而不是直接实例化对象时不使用类成员的默认值?

  7. 7

    为什么在实现中允许使用与在接口上定义的默认值不同的默认值?

  8. 8

    为什么RandomForestClassifier中的max_features的默认值与RandomForestRegressor中的默认值不同?

  9. 9

    为什么在访问结构时需要默认值?

  10. 10

    Java:为什么未使用XX:SurvivorRatio的默认值?

  11. 11

    为什么要推动匹配Git中的默认值?

  12. 12

    为什么out参数没有默认值?

  13. 13

    使用:=时,为什么with = TRUE是默认值?

  14. 14

    为什么我的argparse不显示默认值?

  15. 15

    为什么我的DropDownListFor的默认值无法正常工作?

  16. 16

    TEXT列的MySQL默认值行为异常,为什么?

  17. 17

    为什么constexpr不是所有函数的默认值?

  18. 18

    为什么constexpr不能只是默认值?

  19. 19

    为什么FreezeGun不使用SQLAlchemy默认值?

  20. 20

    为什么Mockito verifyNoMoreInteractions的Scala默认值有问题

  21. 21

    为什么可选参数的默认值必须为常数?

  22. 22

    为什么打印屏幕采用默认值

  23. 23

    为什么`ffmpeg`的`-hide_banner`不是默认值?

  24. 24

    为什么需要“-人类可读”而不是默认值?

  25. 25

    express-locale始终返回默认值-为什么?

  26. 26

    为什么 <value>!0</value> 匹配默认值 0?

  27. 27

    为什么在注释中禁止 null 作为默认值?

  28. 28

    为什么可迭代指针变为NULL?

  29. 29

    为什么此asm代码未将指针指向的值加倍

热门标签

归档