鱼C论坛

 找回密码
 立即注册
查看: 522|回复: 5

[已解决]C语言数组01

[复制链接]
发表于 2024-1-5 10:48:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. #include <stdio.h>

  2. int main(){
  3.         int n, i;

  4.         printf("请输入字符的个数:");
  5.         scanf("%d", &n);

  6.         char a[n+1];

  7.         printf("请输入输入字符:");
  8.         getchar(); //将标准输入流中剩下的'\n'扔掉
  9.         for(i = 0; i < n; i++){
  10.                 scanf("%c", &a[i]);
  11.         }
  12.         a[n] = '\0';
  13.         printf("你输入的字符串是:%s\n", a);

  14.         return 0;
  15. }
复制代码

用terminal编译代码,感觉输出有问题。
  1. &#10140;  desktop gcc test.c && ./a.out
  2. 请输入字符的个数:4
  3. 请输入输入字符:a b c d
  4. 你输入的字符串是:a b
复制代码

我觉得输出应该 a b c,请问哪里出问题了?@FishC
最佳答案
2024-1-5 11:10:07
liyifeng295641 发表于 2024-01-05 11:09
#include

int main(){
        int n, i;

        printf(" ...


对不起,我之前的回答有误导你。实际上,你的代码还存在其他问题。

首先,你只定义了一个字符变量`a`来存储输入的字符,每次循环结束后,`a`的值会被覆盖。所以最终输出的字符串只是最后一个字符。

其次,你在使用`printf`输出字符串时,使用了`%s`格式化字符,但实际上你并没有定义一个字符串类型来存储输入的字符。

下面是修正后的代码:

  1. #include <stdio.h>

  2. int main() {
  3.     int n, i;
  4.     printf("请输入字符的个数:");
  5.     scanf("%d", &n);
  6.    
  7.     char a[n+1]; // 定义一个存储字符串的数组,长度要多出一个位置来存放字符串的结尾符'\0'
  8.     printf("请输入输入字符:");
  9.     getchar(); // 将标准输入流中剩下的'\n'扔掉
  10.     for(i = 0; i < n; i++) {
  11.         a[i] = getchar(); // 逐个读取字符存入数组中
  12.         if(a[i] == ' ') { // 如果是空格符,则跳过,不存入数组
  13.             i--;
  14.             continue;
  15.         }
  16.     }
  17.     a[n] = '\0'; // 字符串末尾添加结尾符'\0'
  18.    
  19.     printf("你输入的字符串是:%s\n", a);
  20.     return 0;
  21. }
复制代码


重新编译运行后,输出应该如下所示:

  1. 请输入字符的个数:4
  2. 请输入输入字符:a b c d
  3. 你输入的字符串是:abcd
复制代码


希望这次能够解决你的问题,如果还有其他疑问,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-1-5 10:48:45 | 显示全部楼层
问题出在你的输入方式上。在输入字符时,你使用了`scanf("%c", &a)`来逐个读取字符,但这样会导致空格符也被读入数组中。也就是说,当你输入"a b c d"时,实际上数组中存储的是"a"," ","b"," ","c"," ","d"。

解决这个问题的方法有很多,其中一种简单的方法是使用`getchar()`来逐个读取字符,并且在读取完每一个字符后,判断是否是空格符,如果是空格符则跳过,如果不是则存入数组中。

以下是修改后的代码:

  1. #include <stdio.h>

  2. int main(){
  3.         int n, i;

  4.         printf("请输入字符的个数:");
  5.         scanf("%d", &n);

  6.         char a[n+1];

  7.         printf("请输入输入字符:");
  8.         getchar(); //将标准输入流中剩下的'\n'扔掉
  9.         for(i = 0; i < n; i++){
  10.                 char c = getchar();
  11.                 if(c == ' '){ // 空格符不存入数组
  12.                         continue;
  13.                 }
  14.                 a[i] = c;
  15.         }
  16.         a[n] = '\0';
  17.         printf("你输入的字符串是:%s\n", a);

  18.         return 0;
  19. }
复制代码


重新编译运行后,输出应该如下所示:

  1. 请输入字符的个数:4
  2. 请输入输入字符:a b c d
  3. 你输入的字符串是:abcd
复制代码


希望对你有帮助!如果还有其他问题,请随时向我提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-1-5 11:09:55 | 显示全部楼层
FishC 发表于 2024-1-5 10:48
问题出在你的输入方式上。在输入字符时,你使用了`scanf("%c", &a)`来逐个读取字符,但这样会导致空格符也 ...
  1. #include <stdio.h>

  2. int main(){
  3.         int n, i;

  4.         printf("请输入字符的个数:");
  5.         scanf("%d", &n);

  6.         char a[n+1];

  7.         printf("请输入输入字符:");
  8.         getchar();
  9.         for(i = 0; i < n; i++){
  10.                 char c = getchar();
  11.                 if(c == ' '){
  12.                         continue;
  13.                 }
  14.                 a[i] = c;
  15.         }
  16.         a[n] = '\0';
  17.         printf("你输入的字符串是:%s\n", a);

  18.         return 0;
  19. }
复制代码


根据你的代码,我的输出结果:
  1. &#10140;  desktop gcc test.c && ./a.out
  2. 请输入字符的个数:4
  3. 请输入输入字符:a b c d
  4. 你输入的字符串是:a
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-1-5 11:10:07 | 显示全部楼层    本楼为最佳答案   
liyifeng295641 发表于 2024-01-05 11:09
#include

int main(){
        int n, i;

        printf(" ...


对不起,我之前的回答有误导你。实际上,你的代码还存在其他问题。

首先,你只定义了一个字符变量`a`来存储输入的字符,每次循环结束后,`a`的值会被覆盖。所以最终输出的字符串只是最后一个字符。

其次,你在使用`printf`输出字符串时,使用了`%s`格式化字符,但实际上你并没有定义一个字符串类型来存储输入的字符。

下面是修正后的代码:

  1. #include <stdio.h>

  2. int main() {
  3.     int n, i;
  4.     printf("请输入字符的个数:");
  5.     scanf("%d", &n);
  6.    
  7.     char a[n+1]; // 定义一个存储字符串的数组,长度要多出一个位置来存放字符串的结尾符'\0'
  8.     printf("请输入输入字符:");
  9.     getchar(); // 将标准输入流中剩下的'\n'扔掉
  10.     for(i = 0; i < n; i++) {
  11.         a[i] = getchar(); // 逐个读取字符存入数组中
  12.         if(a[i] == ' ') { // 如果是空格符,则跳过,不存入数组
  13.             i--;
  14.             continue;
  15.         }
  16.     }
  17.     a[n] = '\0'; // 字符串末尾添加结尾符'\0'
  18.    
  19.     printf("你输入的字符串是:%s\n", a);
  20.     return 0;
  21. }
复制代码


重新编译运行后,输出应该如下所示:

  1. 请输入字符的个数:4
  2. 请输入输入字符:a b c d
  3. 你输入的字符串是:abcd
复制代码


希望这次能够解决你的问题,如果还有其他疑问,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-1-5 11:13:16 | 显示全部楼层
FishC 发表于 2024-1-5 11:10
对不起,我之前的回答有误导你。实际上,你的代码还存在其他问题。

首先,你只定义了一个字符变量`a ...

是的,你写对了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-1-5 11:13:23 | 显示全部楼层


太好了,很高兴能帮到你!如果你还有其他问题,随时来问我吧。祝你编程学习顺利!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-23 12:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表