【问题标题】:loop not executing last statement in last iteration in C?循环没有在C的最后一次迭代中执行最后一条语句?
【发布时间】:2016-03-13 02:49:30
【问题描述】:

for 循环不会执行循环体中的最后一条语句,如果它是最后一次迭代(或只有一次迭代)。并且即使它只包含 printf() 语句并且还跳过函数体中接下来的语句也无法正常工作。这是代码:

void build()
{
    int i;
    system("clear");
    printf("\nBuild the table");
    printf("\n");
    printf("\nMaximum number of entries ------> 20");
    printf("\nHow many do u want------>");
    scanf("%d",&num);
    printf("\nEnter the following items\n");
    for(i=0;i<num;i++)
    {
        printf("\nName ");
        scanf("%s",emp[i].name);        
        printf("\nCode");
        scanf("%ld",&emp[i].code);      
        printf("\nDesignation");
        scanf("%s",emp[i].designation);     
        printf("\nAge");
        scanf("%d",&emp[i].age);        
        printf("\nYears of experience");
        scanf("%d",&emp[i].exp);        
        printf("\nHello everyone");
    }
    for(i=0;i<num;i++)
    {
        printf("\n%s",emp[i].name);
        printf("\n%ld",emp[i].code);
        printf("\n%s",emp[i].designation);
        printf("\n%d",emp[i].age);
        printf("\n%d",emp[i].exp);
    }
    printf("\nGoing to main menu"); 
}


struct employee
{
    char name[20];
    long int code;
    char designation[20];
    int exp,age;
};
struct employee emp[max];

我在函数中的 for 循环和上面都面临同样的问题是结构声明是 max=20;

【问题讨论】:

标签: c for-loop


【解决方案1】:

你的分析是错误的——问题不在于执行,而在于行缓冲。

printf 有几种优化 io 的模式——最常被误解的是行缓冲,当遇到换行符时会自动刷新。

所以

printf("\nGoing to main menu"); 

不会刷新,因为换行符不在末尾​​p>

在哪里

printf("Going to main menu\n");  

会冲洗。如果您必须按照自己的方式进行操作,请使用 fflush,例如

printf("\nGoing to main menu"); 
fflush(stdout);

强制刷新

【讨论】:

  • 嘿,索伦,谢谢。但是如果我通过 switch 语句调用该函数,它就不起作用
【解决方案2】:

这是一个关于 C 表面概念的部分。情况是,如果不将新行 (\n) 附加到 printf() 语句,那么我们就有问题了。

它在很大程度上也依赖于编译器,但我们最好在每个 printf() 语句后添加一个新行。

所以,让最后一条语句,即 line 33 更改为以下内容:

printf("\nGoing to main menu\n")

现在\n 有帮助的原因是,在看到新行时,编译器将执行flush。现在说了这么多,如果您仍然坚持没有新行,那么请查看以下代码::)

printf("\nGoing to main menu") fflush(stdout);

【讨论】:

    猜你喜欢
    • 2015-11-20
    • 1970-01-01
    • 2017-12-31
    • 2013-03-18
    • 1970-01-01
    • 1970-01-01
    • 2011-07-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多