我正在尝试使这个嵌套循环工作..由于某种原因代码不会进入第二个循环..它一直要求输入一个字母,所以它不会进入带有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);
}
}
}
答案 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是将字符串放到空格字符处。所以这就是它要求的原因 来自用户的十个字符。