程序应该收到一个字符串,然后检查每个字母的提及频率。
到目前为止我做了这么多(我只会在这个阶段检查A
字母)
int main(int argc, char const *argv[])
{
int i=0;
int l,k;
int r=10;
char list[10][10] ;
/* recieve a strng*/
char str[10] ;
fgets(str, 10, stdin);
str[10] = 0;
/*initialise list[] to -'s */
for (l = 0; l < 10; l++) {
for(k=0; k<10; k++) {
list[l][k]='-' ;
}
printf("\n");
}
/*checks if the letter== "A" if yes replace with * */
for ( i = 0; i < 10 ; ++i) {
if (str[i]== 97 ) {
list[r][0]='*';
r--;
}
}
/*print the second list[] */
for (l = 0; l < 10; l++) {
for(k=0; k<10; k++) {
printf("%c ", list[l][k]);
}
printf("\n");
}
return 0;
}
我在添加阅读字符串代码之前对其进行了测试并且它有效,但它不是我想要的:/
char list[10];
fgets(str, 10, stdin);
str[10] = 0;
我应该集中精力让它再次发挥作用的任何想法? 我究竟做错了什么?
答案 0 :(得分:3)
问题,我认为是在
<a class="parent">
<span id='mySpan'>
<img src="http://www.mail-signatures.com/articles/wp-content/uploads/2014/08/facebook.png" alt=""><br>
</span>
</a>
此处, list[r][0]='*';
的值为r
,这是一种越界访问。它调用undefined behavior。
请记住,10
数组使用基于C
的索引。所以,对于像
0
有效索引为0到9。
除此之外,使用字母的直接ASCII值,如 int arr[10] = {0};
不是非常便携的方法。您应该更好地使用if (str[i] == 97 )
。
那就是说,我不确定你的代码的逻辑,它不会从任何角度做你打算它做的事情。