【问题标题】:Second scanf in my function does not work我的函数中的第二个 scanf 不起作用
【发布时间】:2021-03-31 19:09:52
【问题描述】:

由于某种原因,我的第二个 scanf 出现了分段错误。我特别困惑,因为它适用于第一个,但不适用于第二个scanf。以下是相关代码:

int main() {
    NodePtr* startPtr = NULL;
    int base; 
    int number;
    
    getInputs(&base, &number);
    
    convertNumber(startPtr, base, number);
    return 0;
}

void getInputs(int* basePtr, int *numberPtr){
    printf("Please enter a base number system (2-10 or 16): ");
    scanf("%d", basePtr);
    
    while(*basePtr <2 || *basePtr >= 11 && *basePtr <=15 || *basePtr >= 17 ){
        printf("\nInvalid input! Please choose a base from 2-10, or 16: ");
        scanf("%d", basePtr);
    }
    
    printf("\nWhat decimal number would you like to convert: ");//asks for a number to convert
    printf("\n%p\n", numberPtr);
    scanf("%d", numberPtr);
}

输出:

Please enter a base number system (2-10 or 16): 2
What decimal number would you like to convert:                                                                                         
0x7ffc6b599a34                                                                                                                         
3                                                                                                                                      
Segmentation fault (core dumped)

【问题讨论】:

  • 我运行它时不会出现段错误。你确定不是你没有提供的convertNumber函数中吗?
  • startPtr 仍然是 NULL,当你将它传递给 convertNumber() 时,无论如何。
  • 此代码不完整。您可以编辑帖子以包含convertNumber 的函数定义和NodePtr 的结构定义
  • 另外,我认为它与 convertNumber 函数没有任何关系,因为两个函数调用之间的任何 printf 命令都不起作用。
  • 先尝试声明 void getInputs(int* basePtr, int *numberPtr);,然后再调用main()

标签: c scanf


【解决方案1】:

在我的程序中,我在两个函数调用(此处未显示)之间有一个 printf 命令来测试是第一个还是第二个函数调用导致了问题。当我运行它时,它没有在 main 中打印 printf 语句,所以我认为这是导致问题的第一个函数调用。

事实证明,它实际上是第二个函数调用的空指针,虽然我不确定为什么它不会在两个函数调用之间打印 printf 语句,但 getInputs 函数确实有效。谢谢!

【讨论】:

  • stdout 流被缓冲。您需要在每次调用后使用fflush(stdout),以便将其用作调试工具。
猜你喜欢
  • 1970-01-01
  • 2012-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-27
相关资源
最近更新 更多