在我的.txt文件中,我有关注数据。
姓名:姓名
得分:0.00%
姓名:姓名
得分:0.00%
姓名:姓名
得分:6.67%
我尝试使用此代码
public class MakeInactiveUsersPassiveWorker : PeriodicBackgroundWorkerBase, ISingletonDependency
{
private readonly IRepository<User, long> _userRepository;
public MakeInactiveUsersPassiveWorker(AbpTimer timer, IRepository<User, long> userRepository)
: base(timer)
{
_userRepository = userRepository;
Timer.Period = 5000; //5 seconds (good for tests, but normally will be more)
}
[UnitOfWork]
protected override void DoWork()
{
using (CurrentUnitOfWork.DisableFilter(AbpDataFilters.MayHaveTenant))
{
var oneMonthAgo = Clock.Now.Subtract(TimeSpan.FromDays(30));
var inactiveUsers = _userRepository.GetAllList(u =>
u.IsActive &&
((u.LastLoginTime < oneMonthAgo && u.LastLoginTime != null) || (u.CreationTime < oneMonthAgo && u.LastLoginTime == null))
);
foreach (var inactiveUser in inactiveUsers)
{
inactiveUser.IsActive = false;
Logger.Info(inactiveUser + " made passive since he/she did not login in last 30 days.");
}
CurrentUnitOfWork.SaveChanges();
}
}
}
获得此输出:
姓名:姓名
得分:0.00%
姓名:姓名
得分:0.00%
姓名:姓名
得分:6.67%
而不是我得到低于输出。
测试历史
姓名:姓名
得分:0.00%
姓名:姓名
得分:0.00%
姓名:姓名
得分:6.67%
得分:6.67%
答案 0 :(得分:1)
两件事:puts
函数写一个换行符; fgets
函数可能包含缓冲区中的换行符。
这意味着当您首先打印singleLine
时会有换行符(因为fgets
将其放在那里),然后puts
会写入自己的换行符。
删除fgets
写入缓冲区的换行符,或者不使用puts
。
答案 1 :(得分:1)
while(!feof(fPointer)){
fgets(singleLine, 50, fPointer);
puts(singleLine);
int i;
for(i=0; i>=0; i++){
if(i%2==0){
printf("\n");
}
break;
}
}
有几点需要注意:
fgets()
读取直到换行符,将包含在缓冲区中。因此,在以下puts()
调用中,您之后已经输出了换行符,puts()
甚至自己添加换行符。
请考虑以下代码:
int i;
for(i=0; i>=0; i++){
if(i%2==0){
printf("\n");
}
break;
}
你实际上是在打印一个换行符,然后打破循环。所以它与普通的
没有区别printf("\n");
计算上述两个内容,实际上每个while
循环实际打印3个换行符:一个是fgets()
写入缓冲区,一个来自puts()
,一个是手动。
要修复它们,您需要完成两项工作:
从fgets()
给你的内容中删除换行符:
singleLine[strlen(singleLine) - 1] = '\0';
让循环更好:
int i = 0; // Must initialize!
while (condition) {
other_statements;
i++;
if (i%2==0) {
printf("\n");
}
// Do nothing if 'i' is odd
}
停止使用while (!feof())
。请检查fgets
的返回值:
char *ret = fgets( ... );
if (ret == NULL)
break;
答案 2 :(得分:0)
printf("Test History\n\n");
FILE *pToFile = fopen("history.txt", "r");
char input[50];
int i=0;
while(fgets(input, 50, pToFile)){
printf("%s", input);
i++;
if(i%2==0){
printf("\n");
}
}
fclose(pToFile);
答案 3 :(得分:-2)
麻烦在于你的逻辑 - 你在'while'中有'if'所以它循环并依赖每个'while'(来自你文件的行)。
我不是专家,所以没有代码,但似乎你得到了命令。我将使用的逻辑是查看行中的文本并从中添加'\ n'。
即。
if singleline (contains - however you do that in c) "%"
添加\ n