我正在尝试让这个程序要求书名和数字,但是有些东西与while循环不对

时间:2016-10-16 12:17:13

标签: c loops input while-loop scanf

该程序应该反复询问书名和编号,直到用户输入书名"end"后才能停止。

但是当我在第一个输入循环之后运行程序时,第二个循环向前行为非常奇怪,我没有机会输入书名或结束程序。我尝试使用fgets,但这也不起作用。它确实工作得更好但在第二个循环中它会打印两个打印语句然后要求输入。

int main()
{
    int i, j, temp, bk_no[20], lib_size = 0;
    char bk_name[20], end[3]="end";
    printf("\n===========ACCESSING LIBRARY===========\n\n   (Type end to close the library)\n");

    while ( lib_size < sizeof bk_no/sizeof bk_no[0] )       //while lib_size<20->(20*4)/4
    {
        printf("\nWhat is the name of the book?\n");
        scanf_s("%s", &bk_name);

        if ( strcmp(bk_name, end)==0 )
            break;

        printf("What is the books number in the series?\n");
        scanf_s("%d", &bk_no[lib_size]);

        if ( bk_no[lib_size]==-1 )
            break;

        lib_size++;
    }
}

1 个答案:

答案 0 :(得分:3)

  1. end[3]应为end[4] ...以说明字符串末尾的'\0'

  2. scanf_s()应该传递"%s"的尺寸参数,您使用它就像使用scanf()而不是scanf_s() read the documentation一样

  3. 您正在将数组地址传递给scanf_s() scanf_s()scanf()错误。

    数组在此上下文中自动指向其第一个元素,因此您不需要运算符的&地址将其传递给scanf()

  4. 希望它有所帮助。