首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么scanf()总是等待输入

为什么scanf()总是等待输入
EN

Stack Overflow用户
提问于 2015-01-18 00:36:23
回答 3查看 396关注 0票数 0

我正在用一些不起作用的例子来更新它。scanf一直在请求一些它不应该请求的输入。

代码语言:javascript
复制
int n = 0, i = 0, j = 0;
double a[DIM][DIM];

do
{
    printf("Give the dimension n: ");
    scanf("%d", &n);
}while(n < 2 || n > DIM);

printf("n: %d\n", n);

printf("Give matrix A:\n");
for(i = 0; i < n; i++)
{
    printf("Row %d:\n", i+1);
    for(j = 0; j < n; j++)
    {
        printf("\tCol %d: ",j+1);
        scanf("%lf", &a[i][j]);
    }
}
printf("Workin");

输入示例:

代码语言:javascript
复制
Give the dimension n: 2
n: 2
Give matrix A:
Row 1:
    Col 1: 1.0
    Col 2: 2.0
Row 2:
    Col 1: 3.0
    Col 2: 4.0

你知道为什么这不管用吗?我可能太傻了,不是吗?

EN

回答 3

Stack Overflow用户

发布于 2015-01-18 01:37:51

scanf()会忽略空格,因此请尝试单独使用它们

代码语言:javascript
复制
void consumeSpaces()
{
    int chr;
    while ((chr = fgetc(stdin)) && (isspace(chr) != 0));
    ungetc(chr, stdin);
}

int main()
{
    int i, j, n;
    double a[DIM][DIM];

    do
    {
        printf("Give the dimension n: ");
        scanf("%d", &n);
    } while (n < 2 || n > DIM);


    printf("n: %d\n", n);
    printf("Give matrix A:\n");

    consumeSpaces();
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < n; j++)
        {
            consumeSpaces();
            scanf("%lf", &a[i][j]);
        }
    }

    for (i = 0; i < n; i++)
    {
        for (j = 0; j < n; j++)
        {
            printf("a[%d][%d] -> %f\n", i, j, a[i][j]);
        }
    }

    return 0;
}
票数 1
EN

Stack Overflow用户

发布于 2015-01-18 00:46:43

你确定这是一个无限循环吗?代码在我看来没问题,但是你的双循环会执行很多次。例如,如果n为19,则外循环将执行19次,而内循环将为外循环的每次迭代执行19次,总共执行361次。

票数 0
EN

Stack Overflow用户

发布于 2015-01-18 00:47:47

我建议您从scanf读取的数据太短或数字格式错误。如果获得坏数据,scanf将继续读取,直到获得好数据,但在某种程度上这是非常令人困惑的。通常使用fgets()和sscanf()。

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

https://stackoverflow.com/questions/28001688

复制
相关文章

相似问题

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