【问题标题】:Cannot continue after scanf functionscanf 功能后无法继续
【发布时间】:2019-05-02 05:16:31
【问题描述】:

我正在尝试创建一个程序,要求用户仅用数字构建一个数组,并删除向用户询问的特定元素

我的问题是,当我编译和运行代码时,它似乎卡在了我的 scanf 函数上。我已经放置了指标来了解我的代码当前在哪里运行,如下面的程序所示

注意:我不能使用指针

    #include <stdio.h>


    #define MAX_LEN 5



    void remover(int list[], int item)
    {
        int temp[MAX_LEN] = {'e', 'e', 'e', 'e', 'e'}; //e stands for EMPTY
        int i, j, k;
        i = j = k = 0;
        for(i = 0; i < MAX_LEN ;  i++)
        {
            if(list[i] != item) //if array index doesnt match with item to be removed
            {                   
                temp[j++]=list[i]; //copy element to temporary array
            }
        }
        for(k; k<MAX_LEN; k++) //copy TEMP into LIST
        {
            list[k] = temp[k];
        }
    }

    void add(int list[], int item, int nth)
    {
        printf("\nentering add func listing");
        list[nth] = item;
    }

    int main()
    {
        int list[MAX_LEN];
        int item_number, remove_number;
        int inputFlag = 1;
        int i;
        putchar('\n');
        printf("\n------------------------------------------------------");
        printf("\n-------___Ordered List Array Implementation____-------");
        printf("\n------------------------------------------------------");
        printf("\nEnter 5 elements to be filled in:                     ");

        for( i = 0; i<6 && inputFlag; i++)
        {

            printf("\nEnter item number %d in list\t", i+1);
            scanf("%d\n", item_number); //I have tried removing the trailing \n after %d but still gives the same problem
            printf("\n..Done scanning input"); //PROGRAM CANNOT CONTINUE HERE

            if(item_number != sizeof(int))
            {
                printf("\nPlease input integers. Terminating...");
                exit(0);
            }
            add(list, item_number, i);
            printf("\nAdded to add func");
        }

        printf("\nShowing index of list.. ");
        for(int j=0; j<i; j++)
            printf("[%d] ==> %d", j, list[j]);

        printf("\n------------------------------------------");
        printf("\n__________________________________________");
        printf("\nEnter item to be removed:                 ");
        scanf("%d\n", remove_number);
        remover(list, remove_number);
        printf("\nNew list with item ' %d ' removed", remove_number);
        putchar('\n');
        for(int m = 0; m < MAX_LEN; m++)
        {
            if(list[m] == sizeof(int))
                printf("\n[%d] ==> %d", m, list[m]);
            if(list[m] == sizeof(char))
                printf("\n[%d] ==> %c", m, list[m]);
        }
    }

【问题讨论】:

  • 需要使用地址运算符:scanf("%d\n", &remove_number);
  • sizeof(int) 是(可能)4,sizeof(char) 是(肯定)1,所以您的输入循环只接受数字 4 作为输入,而您的输出循环只会打印 1(作为不可打印的字符)和 4's。此外,您循环输入六次,而不是五次,当您在 list 之外写入时,这将导致未定义的行为。

标签: c scanf


【解决方案1】:

您忘记在您的scanf 通话中输入&amp;

例如你应该试试:

scanf("%d\n", &amp;item_number);

它应该可以正常工作。

查看this 文章以获取有关scanf 的更多信息。

scanf 或扫描格式的字符串,需要您​​在其中存储值的变量的位置(地址)。

结帐this问题以获取更多信息。

【讨论】:

  • 还是没有解决问题。
  • 该程序在我的情况下运行良好。如果您有与该程序相关的其他问题,请发布另一个问题。您可能会很快得到帮助。
  • 编译在我的情况下是成功的。问题是当我运行可执行文件时。我使用 gcc filename.c -o filename 构建并在 cmd 上运行 filename。输入一个值后,比如“2”,程序会暂停,我必须使用 Ctrl+C 终止退出。
  • 好的,你必须再输入一次数字,然后再按回车键。问题在于你的循环,而不是 scanf。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-29
  • 2019-06-30
  • 1970-01-01
  • 2012-12-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多