字符存入有些问题
#include <stdio.h>#define MAX 1024
int main(){
char arr;
int k;
//输入字符
printf("请输入一串字符:");
scanf("%s",arr);
printf("%s",arr);
int len=sizeof arr/arr;
//将字符存入数组
char result;
int i=0,j=0;
for(k=0;k<len;k++){
if(arr==' '){
continue;//若为空格跳过 //题目
}else{ //用户输入一个英文句子,你的程序将这个字符串按空格进行分割,返回由单词组成的二维数组。
result=arr;
j++;
} //这个代码在输出有点问题,空格后的数组内容显示不出来
}
//打印
for(int n=0;n<i;n++){
for(int m=0;m<j;m++){
printf("%c",result);
}printf("\n");
}
return 0;
} 你的代码中有几个问题需要解决。下面是修复后的代码:
#include <stdio.h>
#include <string.h>
#define MAX 1024
int main() {
char arr;
int k;
// 输入字符
printf("请输入一串字符:");
fgets(arr, MAX, stdin); // 使用 fgets 替换 scanf 以处理空格
int len = strlen(arr);
// 将字符存入数组
char result;
int i = 0, j = 0;
for (k = 0; k < len; k++) {
if (arr == ' ' || arr == '\n') { // 当遇到空格或换行符时
result = '\0'; // 在当前行添加字符串结束符
i++; // 移动到下一行
j = 0; // 将列索引重置为 0
} else {
result = arr;
j++;
}
}
result = '\0'; // 在最后一个单词末尾添加字符串结束符
// 打印
for (int n = 0; n <= i; n++) {
printf("%s\n", result); // 使用 %s 而不是逐字符打印
}
return 0;
}
这个修复的代码有以下更改:
1. 使用fgets()代替scanf()以正确处理包含空格的字符串。
2. 使用strlen()计算字符串长度,而不是sizeof 。
3. 当遇到空格或换行符时,将字符串结束符\0添加到当前行,并将行和列索引适当调整。
4. 在打印二维数组时,直接使用%s而不是逐字符打印。 本帖最后由 歌者文明清理员 于 2023-5-7 18:03 编辑
你好!根据你的代码,我发现有几个问题需要注意。
首先,在输入字符后,你用 sizeof 计算了数组 arr 的长度,但这实际上并不是该数组中字符的数目。你可以使用 strlen 函数来获取输入的字符串的长度。
其次,在循环存储字符到二维数组 result 中时,你使用了两个变量 i 和 j 来分别记录行和列的索引,但是你并没有适当地更新行和列的值。你应该在每存储一个字符之后,将列索引 j 加一;如果当前字符是空格,则应该将行索引 i 加一,并且将列索引 j 重置为零。
最后,在打印二维数组时,你使用了错误的索引变量。在循环中,你应该使用变量 n 和 m 分别代表行和列的索引,而不是变量 i 和 j。另外,打印字符时应该使用 result 而不是 result[ i ]。
下面是修改后的代码,仅供参考:
c
#include <stdio.h>
#include <string.h>
#define MAX 1024
int main() {
char arr;
int k;
//输入字符
printf("请输入一串字符:");
scanf("%s", arr);
printf("%s\n", arr);// 输出输入的字符串
//将字符存入数组
char result;
int i = 0, j = 0, len = strlen(arr);
for (k = 0; k < len; k++) {
if (arr == ' ') {
// 若为空格,将列索引 j 重置为零,并将行索引 i 加一
j = 0;
i++;
} else {
result = arr;// 存储当前字符到二维数组中
j++;// 列索引加一
}
}
//打印
for (int n = 0; n <= i; n++) {// 遍历行
for (int m = 0; m < strlen(result); m++) {// 遍历列
printf("%c", result);
}
printf("\n");
}
return 0;
}
#include <stdio.h>
#include <string.h> //需要使用到字符串函数库
#define MAX 1024
int main(){
char arr;
int len;
//输入字符
printf("请输入一串字符:");
scanf("%[^\n]",arr); //使用scanf读取一行字符串,可以包含空格,遇到换行符结束
len=strlen(arr);
if(len==0){
printf("输入的字符为空\n");
return -1;
}
//将字符存入数组
char result;
int i=0,j=0,k;
for(k=0;k<len;k++){
if(arr==' '){
result='\0'; //在当前单词结尾处加上\0 ,以便后续字符串处理函数使用
i++;j=0; //指向下一个单词
}else{
result=arr;
j++;
}
}
result='\0'; //最后一个单词后还需加上\0
//打印二维数组
printf("二维数组如下:\n");
for(int n=0;n<=i;n++){ //注意小于等于i,因为可能存在只有1个单词的情况
for(int m=0;m<strlen(result);m++){ //按照字符串长度输出
printf("%c",result);
}
printf("\n");
}
return 0;
}
这是修改后的代码,主要思路是通过 `scanf("%[^\n]",arr)` 来读取一行字符串,因为如果使用 `%s` ,它会遇到空格或者回车符就结束了,而我们需要一次性输入整行字符串。从输入的字符串中读取每一个单词,并将其存入结果二维数组 `result` 中,最后输出二维数组即可。
还有几个需要注意的地方:
1. 在当前单词结尾处加上 `\0` ,以便后续处理函数使用。在 C 语言中,字符串需要以空字符 `\0` 结尾,这个字符表示字符串的结束。因此在每一个单词的结尾处要加上 `\0`。
2. 最后一个单词后还需要加上 `\0`。因为最后一个单词没有空格或回车符来标记它的结束,所以需要手动加上 `\0`。
3. 内层循环需要按照字符串长度输出。因为每个单词的长度不一定相同,因此需要根据每个单词的长度来循环输出。
有用请设置最佳答案 歌者文明清理员 发表于 2023-5-7 18:02
你好!根据你的代码,我发现有几个问题需要注意。
首先,在输入字符后,你用 sizeof 计算了数组 arr 的 ...
把那个 c 删了 sfqxx 发表于 2023-5-7 18:15
把那个 c 删了
习惯留着了
页:
[1]