求问:这段输入二维数组代码的问题
int main(){char str;
int i = 0,j = 0;
printf("请输入五句口号:\n");
while(i < 5)
{
for(j ; (getchar() != '\n');j++){
str = getchar();
}
str = '\0';
i++;
}
printf("你输入的是:\n");
for( i = 0;i < 5;i++)
{
printf("%s\n",str);
}
return 0;
} 这段代码存在几个问题:
1. 变量`str`应该是一个字符数组,而不是一个单个字符。
2. 在while循环中,你使用了一个for循环来读取输入的字符,但是这个for循环没有初始化j的初始值,会导致j的值随机。你可以将`j`的初始化值改为0。
3. 在for循环中,你两次调用了getchar函数,这将读取两个字符,而不是一个字符。你只需要在for循环内部调用一次getchar函数即可。
4. 在for循环内部,你没有对输入的字符进行赋值操作,只是将其存储在了变量`str`中,并且在循环结束后将`str`赋值为'\0'。这样做并不能将输入的字符存储到一个二维数组中。
5. 在最后的for循环中,你只使用了一个字符串变量`str`来打印五句话,这样做是不正确的。你需要使用一个二维字符数组来存储输入的五句话。
下面是修复后的代码示例:
#include <stdio.h>
int main(){
char slogans;
printf("请输入五句口号:\n");
for (int i = 0; i < 5; i++) {
fgets(slogans, 100, stdin);
}
printf("你输入的是:\n");
for(int i = 0; i < 5; i++) {
printf("%s", slogans);
}
return 0;
}
修复后的代码中,我们创建了一个二维字符数组`slogans`,它可以存储五句话。然后使用`fgets`函数来读取输入的每一句话,并将其存储到`slogans`数组中。最后使用一个for循环来打印出输入的五句话。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 本帖最后由 jackz007 于 2024-4-10 17:58 编辑
for(j ; (getchar() != '\n');j++) {// 这个 getchar() 不会被纳入字符串 str,此外,j 不初始化为 0,只有第 1 个字符串能被正确录入,后续的都会出错。
str = getchar() ; // 这个 getchar() 会被纳入字符串 str,但是,如果这时键入的是 '\n',并不会结束输入
循环中使用了两个 getchar(),一个用于判断键入的是否是 '\n',另一个用于录入字符串 str,这样就会存在以下两个问题:
1、每键入 2 个字符才会录入其中的一个(第 2 个字符)进入字符串 str
2、键入回车不一定能够结束一个字符串的输入。只有当 '\n' 恰好是两个字符中的前一个时才可以,否则,只是会直接被录入 str,而并不能结束输入;
应该这么修改:
#include <stdio.h>
int main(void)
{
char str ;
int i , j ;
printf("请输入五句口号:\n") ;
for(i = 0 ; i < 5 ; i ++) {
for(j = 0 ; (str = getchar()) != '\n' ; j ++) ; // 只用一个 getchar(),把判断和录入整合起来,此外,每个字符串都要初始化 j = 0
str = '\0' ;
}
printf("你输入的是:\n") ;
for( i = 0 ; i < 5 ; i ++) printf("%s\n" , str) ;
} jackz007 发表于 2024-4-10 16:35
循环中使用了两个 getchar(),一个用于判断键入的是否是 '\n',另一个用于录入字符串 str,这样 ...
谢谢
页:
[1]