首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么当我按下ctrl + D键时,我的程序会在它结束之前打印一些东西?

为什么当我按下ctrl + D键时,我的程序会在它结束之前打印一些东西?
EN

Stack Overflow用户
提问于 2021-03-13 20:57:03
回答 1查看 219关注 0票数 2

所以我写了一个简单的程序,把一个十进制转换成二进制,它只接受正整数。因此,像-2和1.1这样的数字会输出“对不起,这不是一个正整数。”它无限地要求用户输入一个数字,直到用户按下ctrl + D为止。然而,当我测试它时,它打印出了“对不起.”语句,然后再结束程序。

这是我的代码:

代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h>

void DecToBin(int userInput){
    int binary[32];
    int i = 0;
    while (userInput > 0) {
        binary[i] = userInput % 2;
        userInput /= 2;
        i++;
    }
    for (int j = i - 1; j >= 0; --j) {
        printf("%d", binary[j]);
    }
}

int main(void) {
    double userDec;
    int temp;

    printf("Starting the Decimal to Binary Converter!\n\n");

    while(!feof(stdin)) {
        printf("Please enter a positive whole number (or EOF to quit): ");
        scanf("%lf", &userDec);
        temp = (int)(userDec);
        if ((userDec > 0) && (temp / userDec == 1)) {
            printf("\n\t%.0lf (base-10) is equivalent to ", userDec);
            DecToBin(userDec);
            printf(" (base-2)!\n\n");
        }
        else {
            printf("\tSorry, that was not a positive whole number.\n");
        } 
    }
    printf("\n\tThank you for using the Decimal to Binary Generator.\n");
    printf("Goodbye!\n\n");
    return 0; 
}

(所有的制表符和换行符都是它应该如何格式化的,所以不要注意这一点)因此,据我所理解,我的程序将ctrl + D作为我的while循环中的其他部分。知道为什么吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-13 21:17:04

似乎你认为code会在代码中触发某种破坏。比如关键字break。这不是真的。

阅读这篇文章,看看当您按C-d:https://stackoverflow.com/a/21365313/6699433时发生了什么

这并不会导致在C代码中发生任何特殊的事情。scanf根本不会读任何东西。在scanf语句之后,代码将一如既往地继续,因此代码将无条件地输入if语句。

这也是一件非常严重的事情,因为您将使用未初始化的userDecscanf返回成功分配的数量,您应该始终检查返回值。所以在你的情况下你想要这个:

代码语言:javascript
复制
if(scanf("%lf", &userDec) != 1) { /* Handle error */ }

因为如果scanf不返回1,则userDec未分配。

要实现你想要的,只需这样做:

代码语言:javascript
复制
if(scanf("%lf", &userDec) != 1)
    break;
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66618458

复制
相关文章

相似问题

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