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;
答案 0 :(得分:1)
你的分析是错误的 - 问题不是执行而是行缓冲。
function $FncSendLocalNotification($QsContentTitle, $QsContentText, $QsId) {
if (OS_ANDROID) {
$FncTiApiInfo("Local notification fired for Id: " + $QsId);
//> Intent object to launch the application
var $Intent = Ti.Android.createIntent({
action : Ti.Android.ACTION_MAIN,
//> Substitute the correct class name for your application
className : 'com.myapp.test.testActivity',
//> Substitue the correct package name for your application
packageName : Ti.App.id
});
$Intent.flags |= Ti.Android.FLAG_ACTIVITY_CLEAR_TOP | Ti.Android.FLAG_ACTIVITY_NEW_TASK;
$Intent.addCategory(Ti.Android.CATEGORY_LAUNCHER);
//> Create a PendingIntent to tie together the Activity and Intent
var $Pending = Titanium.Android.createPendingIntent({
intent : $Intent,
flags : Titanium.Android.FLAG_UPDATE_CURRENT
});
//> Create the notification
var $Notification = Titanium.Android.createNotification({
//> icon is passed as an Android resource ID -- see Ti.App.Android.R.
//> platforms/android/res/drawable/my_icon.png
icon :Ti.App.Android.R.drawable.notification,
contentTitle : $QsContentTitle,
contentText : $QsContentText,
contentIntent : $Pending
});
//> Send the notification
Titanium.Android.NotificationManager.notify($QsId, $Notification);
}
}
有几种优化io的模式 - 最常见的误解是线缓冲,碰巧在遇到换行时自动刷新。
所以
printf
不会刷新,因为换行符不在最后
其中
printf("\nGoing to main menu");
会冲洗。如果你必须按照你的方式使用fflush,比如
printf("Going to main menu\n");
强行冲洗
答案 1 :(得分:0)
这是一个C表面概念的部分。情况是,如果没有将新行(\n
)附加到printf()
语句,那么我们就会遇到问题。
它确实在很大程度上依赖于编译器,但我们在每个printf()
语句中添加一个新行是一种很好的做法。
所以,让最后一句话,即 第33行 更改为以下内容:
printf("\nGoing to main menu\n")
现在\n
帮助的原因是,在看到新行时,编译器将执行flush。现在说了这句话,如果你仍然坚持没有新行,那么看看下面的代码::))
printf("\nGoing to main menu")
fflush(stdout);