簡體   English   中英

C - scanf不會停止字符串輸入中的循環

[英]C - scanf doesn't stop looping in string input

我正在做一個小測試,看看一個單詞是否在另一個單詞中,我想返回該單詞開頭的索引。

示例:如果我在“amolum”中檢查“um”,則返回值應為4(單詞開頭的字母“u”的位置)。

這就是我的代碼:

(...)
int cad_look_str (char s1[], char s2[]) {
  int indS1 = 0, indS2 = 0;

  while (s1[indS1]!='\0'|| s2[indS2]!='\0') {
    if (s1[indS1]==s2[indS2]) {
      indS1++;
      indS2++;
    }
    else indS1=0;
  }

  if (s2[indS2]=='\0' && s1[indS1]!='\0') return -1;
  else return indS2-strlen (s1);
}


void main () {
  char s[100];
  char s1[100];

  scanf ("%s",s); 
  scanf ("%s",s1);

  printf ("%d \n", cad_look_str(s1,s) );
}

問題是當我編譯它時,它不會停止在scanf上循環...它只是繼續要求字符串。

如果我把cad_look_str(s1,s1)放在最后一行,它可以正常工作......為什么會這樣?

問候

如果第一個字符與if語句中的比較測試不匹配,則初始循環條件將永遠不會終止。

'while'循環檢查以確保當前字符位置(第一次傳遞時均為0)是非終止符。 如果它們不相同,並且它們不相等, indS1重置為其起始位置。 indS2永遠不會改變,因此while條件不變。

除非由於某種原因掃描是必需組件,否則可能會查看其他一些字符串函數來完成您的任務。

第二個字符串的索引也應該在else部分遞增。

if (s1[indS1]==s2[indS2])
{
        indS1++; indS2++;
}
else {
         indS1=0;
         indS2++;
}

為s1:gdgddadada,s2:dadada等情況更改了cad_look_str()

int cad_look_str (char s1[], char s2[]) {
  int indS1 = 0, indS2 = 0;
  int flag = 0;


  while (s1[indS1]!='\0'&& s2[indS2]!='\0') {
    if (s1[indS1]==s2[indS2]) {
      indS1++;
      indS2++;
      flag = 1;
    }
    else 
    {
        indS1=0;
        indS2++;
        if(flag) indS2--; // to work with srtrings s1: gdgddadada s2: dadada
        flag = 0;
    }
  }

  if (s2[indS2]=='\0' && s1[indS1]!='\0') return -1;
  else return indS2-strlen (s1);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM