C中的嵌套循环不起作用

时间:2014-11-30 18:50:56

标签: c loops for-loop nested

我正在尝试使这个嵌套循环工作..由于某种原因代码不会进入第二个循环..它一直要求输入一个字母,所以它不会进入带有k计数器的代码...并问我10次输入信件

感谢。

 char letter;
 int proposition;
 int i,k;
 char dashes[50];
 proposition=10;
 for (i=0;i<proposition;i++){
    printf("enter letter to guess %s\n");
    scanf("%s", &letter);
     for(k=0;k<ret;k++){
        if (tab[k] == letter){
            dashes[k]= letter;
            printf("%s\n", dashes);
        }
    }
  }

4 个答案:

答案 0 :(得分:1)

scanf("%s", &letter);

问题在于,您要求输入一个字符串,并将其传递给地址。你要么想做

scanf("%c", &letter);或将其更改为int getchar( void );

编辑#1:

我建议不要使用int scanf (const char * format, ...);。有关更多信息,请阅读此处 Disadvantages of scanf

编辑#2:

scanf("%s", letter);在技术上是可行的,因为你只要求一个字母,这样做是错误的。还要记住,字符串以\0结尾,因此请确保为此保留空间。

答案 1 :(得分:0)

试试这个

char letter[2];
int proposition;
int i,k;
char dashes[50]={0};
memset(dashes, '-', strlen(tab));
proposition=10;
for (i=0;i<proposition;i++){
   printf("enter letter to guess %%s\n");
   scanf("%1s", letter);
    for(k=0;k<ret;k++){
       if (tab[k] == *letter){
           dashes[k]= *letter;
           printf("%s\n", dashes);
       }
   }
 }

可能是样本

#include <stdio.h>
#include <string.h>

int main(void){
    char *tab = "foobar";
    int ret = strlen(tab);
    char letter[2];
    int proposition;
    int i,k, match=0;
    char dashes[50]={0};
    memset(dashes, '-', ret);
    proposition=10;
    for (i=0;i<proposition;i++){
        if(match == ret)
            break;
        printf("enter letter to guess\n");
        scanf("%s", letter);
        for(k=0;k<ret;k++){
            if (tab[k] == *letter){
                dashes[k]= *letter;
                ++match;
            }
        }
        printf("%s\n", dashes);
    }
    return 0;
}

答案 2 :(得分:0)

问题似乎与您的ret变量有关 如果您尚未初始化它,则该值将是未定义的,您将不知道循环条件是否为 true

答案 3 :(得分:0)

使用%c代替%s。

%s是将字符串放到空格字符处。所以这就是它要求的原因 来自用户的十个字符。