вложенный оператор if else дает неправильные результаты и не выполняется

#c# #loops #if-statement

#c# #циклы #if-statement

Вопрос:

Я пытаюсь создать файловую систему журнала с индексом в ней. для каждых 100 строк в файле журнала файл журнала должен быть воссоздан в log1.log , для каждых 1000 созданных файлов index1.log воссоздается в index2.log

 if (timesrun % 100 != 0)
{
    Debug.Write(" enter code here. ");
    if (timesrun % 1000 != 0)
    {
        Debug.Write("'");
        Debug.Write(" enter code here. ");
     }
    else
    {
        Debug.WriteLine("rename files index?.xml ");
        string basename = "index";
        string extention = ".log";
        crntstmap  ;
        nowsitemap = basename   crntstmap   extention;
        Debug.WriteLine(nowsitemap);
                        }
    //call method create actual file using the filename   timesrun IE
}
else
{
    Debug.WriteLine("rename files log?.php ");
    string basename = "log";
    string extention = ".log";
    crntindx  ;
    nowindex = basename   crntindx   extention;
    Debug.WriteLine(nowindex);
}
  

Я получаю странные результаты, вторая часть цикла if никогда не запускается, и я никогда не вижу Debug.WriteLine(nowsitemap);

Ответ №1:

Я не совсем уверен, чего вы пытаетесь достичь, но причина, по которой выполнение никогда не входит в эту ветвь, заключается в том, что невозможно, чтобы число не было кратным, 100 но было кратным 1000 . 100 является фактором 1000 .

 if(timesrun % 100 != 0 amp;amp; timesrun % 1000 == 0) // Always false
{
    Debug.WriteLine("rename files index?.xml ");
    string basename = "index";
    ...
  

Комментарии:

1. итак, я должен отбросить цикл ниже другого цикла? как мне запустить оба?

Ответ №2:

В основном ваши сравнения инвертируются. Это:

 if (timesrun % 100 != 0)
  

будет выполняться 99 раз из ста, а не один раз из ста.

Вы имели в виду:

 if (timesrun % 100 == 0)
  

и аналогично для случая 1000 … хотя затем это будет переносить файлы каждые 10 файлов, а не каждые 1000 файлов, поскольку вы будете делать это после 1000 строк. Вы могли бы либо сделать это 100000, либо изменить, чтобы иметь одну переменную для строк и одну для файлов.

(Обратите внимание, что структура вашего кода также будет намного понятнее, если вы соответствующим образом выровняете отступ.)

Ответ №3:

потому if timesrun % 100 != 0 что так всегда timesrun % 1000 будет not 0