首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重复printf()

重复printf()
EN

Stack Overflow用户
提问于 2022-05-04 11:58:38
回答 1查看 82关注 0票数 1

我在试着创造一个游戏。为了做到这一点,我有两个函数size()和ask_column()。

Size()请求用户所需网格的大小。它返回应该是4或8的数字。

代码语言:javascript
复制
int size() /*Ask for the size of the Takuzu that the user wants*/
{
    int size;
    do {
        printf("Type the size of Takuzu that you want (only 4*4 and 8*8 are available): \n");
        scanf("%d",&size);
    }while(size != 4 && size != 8);

    return(size);
}

Ask_column()请求用户所需的列。在矩阵中输入网格的大小,它返回的字符应该是A到D(4 4网格)和A到H(8 8网格)。

代码语言:javascript
复制
char ask_column(int s) /*Ask the user in which column he wants to put his value*/
{
    char column;
    if (s==4)
    {
        do { /*Ask for the column if 4*4*/
            printf("Enter the column of the value you want to enter (A to D): \n");
            scanf("%c", &column);
        } while (column != 'A' && column != 'B' && column != 'C' && column != 'D' && column != 'a' && column != 'b' &&
                 column != 'c' && column != 'd');
    }
    else
    {
        do { /*Ask for the column if 8*8*/
            printf("Enter the column of the value you want to enter (A to H): \n");
            scanf("%c", &column);
        } while (column != 'A' && column != 'B' && column != 'C' && column != 'D' && column != 'E' && column != 'F' &&
                 column != 'G' && column != 'H' && column != 'a' && column != 'b' && column != 'c' && column != 'd' && column != 'e' && column != 'f' &&
                 column != 'g' && column != 'h');
    }
    return column;
}

我遇到的主要问题是重复来自Ask_column()的问题。如果使用size(),ask_column()总是会问2次这个问题。如果不只是我想要的。

代码语言:javascript
复制
int main()
{
    int s;
    s = size();
    ask_column(s);
}

返回:

键入所需的Takuzu大小(只有4_4和8_8可用):4输入要输入的值的列(A到D):输入要输入的值的列(A到D):

代码语言:javascript
复制
int main()
{
    int s;
    s = 4;
    ask_column(s);
}

返回:

输入要输入的值的列(A到D):

我真的很想知道这种重复是否来自。

感谢所有愿意帮忙的人!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-04 12:17:33

您真的不应该使用scanf作为用户输入。在本例中,解决方案非常简单:您需要使用空白。在用户输入第一个数字后,仍有一个换行符要从输入流中读取。scanfask_column中读取它并看到它不是所需的条目之一,因此再次写入提示符。为了避免这个问题,简单的解决方案是在转换说明符中添加一些空格:

代码语言:javascript
复制
scanf(" %c", &column);

但这不是一个好的解决办法。考虑当有人按大小输入W时,程序的行为。程序将立即进入无限循环,不断尝试读取整数,但当它看到W不是int中的有效字符时总是停止。您必须添加一些输入验证并使用无效数据。scanf并不是最好的工具,如果你现在停止使用它,你的生活从长远来看会容易得多。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72112591

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档