鱼C论坛

 找回密码
 立即注册
查看: 1811|回复: 6

[已解决]想问一个关于发送字符串的问题

[复制链接]
发表于 2019-11-7 15:50:36 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 zuihoudetutu 于 2020-1-21 18:38 编辑

sdasd
最佳答案
2019-11-7 16:11:40
本帖最后由 jackz007 于 2019-11-7 20:02 编辑

      两个问题:

1、字符串末尾没有结束标志,当 str[ i ] == '\n' 时,应该把这个字符改为字符串结束标志 str[ i ] = '\0',然后,用 break 语句结束循环;

2、逐个打印字符的时候,应该只打印前面输入的内容,而不是机械地按 100 个字符打印,方法是循环判定当前字符,只有当 str[ i ] != '\0' 的时候,才打印这个字符,否则,就用 break 语句直接结束循环。

     下面是我修改的代码,楼主可以测试一下

  1. #include <stdio.h>
  2. int main(void)
  3. {
  4.         int i                                                            ;
  5.         char ch , str[100]                                               ;
  6.         for(i = 0 ; i < 99 && (ch = getchar()) != '\n'; str[i ++] = ch)  ;
  7.         str[i] = '\0'                                                    ;
  8.         printf("\n")                                                     ;
  9.         for(i = 0 ; str[i] != '\0';) printf("%c" , str[i ++])            ;
  10.         printf("\n")                                                     ;
  11. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-11-7 16:11:40 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2019-11-7 20:02 编辑

      两个问题:

1、字符串末尾没有结束标志,当 str[ i ] == '\n' 时,应该把这个字符改为字符串结束标志 str[ i ] = '\0',然后,用 break 语句结束循环;

2、逐个打印字符的时候,应该只打印前面输入的内容,而不是机械地按 100 个字符打印,方法是循环判定当前字符,只有当 str[ i ] != '\0' 的时候,才打印这个字符,否则,就用 break 语句直接结束循环。

     下面是我修改的代码,楼主可以测试一下

  1. #include <stdio.h>
  2. int main(void)
  3. {
  4.         int i                                                            ;
  5.         char ch , str[100]                                               ;
  6.         for(i = 0 ; i < 99 && (ch = getchar()) != '\n'; str[i ++] = ch)  ;
  7.         str[i] = '\0'                                                    ;
  8.         printf("\n")                                                     ;
  9.         for(i = 0 ; str[i] != '\0';) printf("%c" , str[i ++])            ;
  10.         printf("\n")                                                     ;
  11. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-7 16:28:02 From FishC Mobile | 显示全部楼层
本帖最后由 bin554385863 于 2019-11-7 17:47 编辑

int i , count = 0;//增加一个计数器
char str[100];
for(i=0 ; i < 100 ; i++)
{
    scanf("%c",&str[i]);
    if(str[\i]=='\n')
    {
        break;
    }
    count++;//统计输入的字符个数
}
printf("\n");
for(i=0 ; i<count ;i++)/*输出输入字符,这样即使没有结束符,也可以正常输出*/
{
    printf("%c",str[\i]);
}
printf("\n");
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-7 19:34:56 | 显示全部楼层
jackz007 发表于 2019-11-7 16:11
两个问题:

1、字符串末尾没有字符串标志,当 str[ i ] == '\n' 时,应该把这个字符改为字符串结 ...

试了下 你这个ok 谢谢大佬
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-7 19:35:26 | 显示全部楼层
bin554385863 发表于 2019-11-7 16:28
int i , count = 0;//增加一个计数器
char str[100];
for(i=0 ; i < 100 ; i++)

你这个我这里运行后乱码...
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-7 19:50:39 | 显示全部楼层
本帖最后由 zuihoudetutu 于 2020-1-21 18:38 编辑

ss
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-11-7 20:27:17 | 显示全部楼层
本帖最后由 bin554385863 于 2019-11-7 20:29 编辑
zuihoudetutu 发表于 2019-11-7 19:35
你这个我这里运行后乱码...


你确定?好好看看代码!
360截图20191107202441740.bmp

  1. #include <stdio.h>
  2. int main(int argc, char const *argv[])
  3. {
  4.     int i, count = 0; //增加一个计数器
  5.     char str[100];
  6.     for (i = 0; i < 100; i++)
  7.     {
  8.         scanf("%c", &str[i]);
  9.         if (str[i] == '\n')
  10.         {
  11.             break;
  12.         }
  13.         count++; //统计输入的字符个数
  14.     }
  15.     printf("\n");
  16.     for (i = 0; i < count; i++) /*输出输入字符,这样即使没有结束符,也可以正常输出*/
  17.     {
  18.         printf("%c", str[i]);
  19.     }
  20.     printf("\n");
  21.     return 0;
  22. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-6 09:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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