如果C中的语句如何修复崩溃

时间:2019-09-09 23:21:20

标签: c arrays if-statement

T在as-is内有N个数组输入。分配输入后,您需要检查数组输入是否为静态。我的想法是使函数获得import re, itertools from selenium import webdriver from bs4 import BeautifulSoup as BS def xpath_soup(element): components = [] child = element if element.name else element.parent for parent in child.parents: siblings = parent.find_all(child.name, recursive=False) components.append( child.name if siblings == [child] else '%s[%d]' % (child.name, 1 + siblings.index(child)) ) child = parent components.reverse() return '/%s' % '/'.join(components) def main(): driver = webdriver.PhantomJS(executable_path='phantomjs.exe') driver.set_window_size(1400,1000) driver.get("https://www.pinterest.com/search/pins/?q=old") buttons = driver.find_elements_by_xpath('//button[@data-test-id="seemoretoggle"]'); for btn in buttons: btn.click() html = driver.page_source soup = BS(html, 'html.parser') elem = soup.find(string=re.compile('Tiny House interior')) print(elem) xpath_soup(elem) print(xpath_soup(elem)) if __name__ == '__main__': main() 返回布尔值和3个其他函数。我将在下面显示它们。如果函数返回true,那么我必须在终端中打印某种内容,使其以某种方式仅适用于main int(),当我尝试在分配输入后返回IsMonoStatic(T)的true时,终端崩溃,字面意思是不打印消息,并且终端只是冻结,我需要使用IsMonoStatic(T)才能退出正在执行的程序。

当IsMonoStatic(T)返回true时,第一个条件在终端上起作用

IsMonoNotSmaller(T)

但是当我尝试其他输入时,程序崩溃了。

这是我的代码程序。

ctrl + c

我希望输出

4
1
1
1
1
Array monotonik statik

但是输出在这里不起作用

#include <stdio.h>
#include "array.h"
#include "boolean.h"

boolean IsMonoNotSmaller (TabInt T)
{
    // kamus lokal
    IdxType i; boolean cek;
    // algoritma
    i = GetFirstIdx(T);
    cek = true; // masih dalam kondisi cek
    while ((i<GetLastIdx(T))&&(cek==true)){
        if (T.TI[i]<=T.TI[i+1]){
            cek = true; // benar maka cek lagi
            i++;
        } else{
            cek = false; // berhenti loop
        }
    }
    return cek;
}

boolean IsMonoNotGreater (TabInt T)
{
    // kamus lokal
    IdxType i; boolean cek;
    // algoritma
    i = GetFirstIdx(T);
    cek = true;
    while ((i<GetLastIdx(T))&&(cek==true)){
        if (T.TI[i]>=T.TI[i+1]){
            cek = true; // benar maka cek lagi
            i++;
        } else{
            cek = false; // berhenti loop
        }
    }
    return cek;
}

boolean IsMonoStatic (TabInt T)
{
    // kamus lokal
    IdxType i;
    boolean cek;
    // algoritma
    i = GetFirstIdx(T);
    cek = true; // tetap ngecek
    while ((i<GetLastIdx(T))&&(cek=true)){
        if (T.TI[i]==T.TI[i+1]){
            cek = true;// belum ditemukan & ttp lanjut pncarian
            i++;
        } else{ // != berhenti cek
            cek = false;
        }
    }
    return cek;
}

int main(){
    /* kamus lokal */
    TabInt T;

    /* algoritma */
    // read input
    BacaIsi(&T);

    if (IsMonoStatic(T)==true){
        printf("Array monotonik statik\n");
    } else {
        if (IsMonoNotSmaller(T))
            printf("Array monotonik tidak mengecil\n");
        if (IsMonoNotGreater(T))
            printf("Array monotonik tidak membesar\n");
        printf("Array tidak monotonik\n");
    }

    return 0;
}

1 个答案:

答案 0 :(得分:1)

问题出在您的while循环上。

while ((i<GetLastIdx(T))&&(cek=true)){

在这里,我认为您打算写cek == true

看看这里的控制流程,我们可以使用for循环来实现。这是一个示例,重写IsMonoStatic

boolean IsMonoStatic (TabInt T)
{
    for(IdxType i = GetFirstIdx(T); i < GetLastIdx(T); i++)
    {
        if(T.TI[i] != T.TI[i + 1])
        {
            return false;
        }
    }

    return true;
}