#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main(){
int num_test,i,j,k;
scanf("%d ",&num_test);
char array[num_test][35];
for (i=0;i<num_test;i++){
fgets(array[i],35,stdin);
array[i][strcspn(array[i],"\n")]='\0';
}
for (j=0;j<num_test;j++){
for (k=0;k<35;k++){
while(array[j][k] != '\0'){ // I am seeing when the name entered ends then this loop should stop.
if (array[j][1] == 'a'){
array[j][1] = 'A';
}
}
}
}
return 0;
}
上面的代码没有终止,但继续接受输入并且没有显示结果。如果我删除第二个for循环,问题不会持续存在。我输入2到scanf然后詹姆斯然后绑定到两个fgets但它只是继续要求更多的输入。
答案 0 :(得分:0)
在此代码块中
for (j=0;j<num_test;j++){
for (k=0;k<35;k++){
while(array[j][k] != '\0'){
if (array[j][1] == 'a'){
array[j][1] = 'A';
}
}
}
}
你有一个不必要的while
循环,一旦开始就永远不会终止,因为该循环中的任何内容都不会改变循环条件的结果。假设您的目标是将'a'
的每次出现更改为'A'
我建议
for(j = 0; j < num_test; j++) {
for(k = 0; k < 35; k++) {
if(array[j][k] == '\0') {
break; // quit when terminator found
}
if(array[j][k] == 'a') { // changed 1 to k
array[j][k] = 'A'; // changed 1 to k
}
}
}
我还建议使用35
或#define
替换“幻数”const int
。