飞花落尽 发表于 2021-10-22 22:32:56

(S1E19动手题2)为什么我输入小于20字的字符输出会换一行,但是输入大于20字的就不会?

#include <stdio.h>
#include <string.h>

int main(void)
{
        char str1;
        char str2;
        int i = 0,j = 0,space = 0,ddl = 0;
       
        printf("请输入一行文本:");
        while ((str1 = getchar()) != '\n')
                ;
        str1 = '\0';
       
        for (j = 19;j >= 0; j--)
        {
                if (str1 == ' ')
                {
                        space = 1;
                        ddl = j;
                        break;
                }
        }
       
        if (!(space))
        {
                strncpy(str2,str1,20);
                str2 = '\0';
                printf("你输入的文本是:%s",str2);       
        }
        else
        {
                strncpy(str2,str1,ddl);
                printf("你输入的文本是:%s",str2);       
        }
       
    return 0;
}

ba21 发表于 2021-10-22 22:32:57

      printf("请输入一行文本:");
      while ((str1 = getchar()) != '\n');

      str1[--i] = '\0';

傻眼貓咪 发表于 2021-10-23 08:08:21

本帖最后由 傻眼貓咪 于 2021-10-23 09:58 编辑

#include <stdio.h>
#include <string.h>

int main(void)
{
    char str1;
    char str2;
    int i = 0, j = 0, space = 0, ddl = 0;
    printf("请输入一行文本:");
    while ((str1 = getchar()) != '\n'); // 这里最后 i++
    str1[--i] = '\0';                  // 如上,这里 i 必须减一
    for (j = 19; j >= 0; j--)
    {
      if (str1 == ' ')
      {
            space = 1;
            ddl = j;
            break;
      }
    }
    if (!(space))
    {
      strncpy(str2, str1, 20);
      str2 = '\0';
      printf("你输入的文本是:%s", str2);
    }
    else
    {
      strncpy(str2, str1, ddl);
      printf("你输入的文本是:%s", str2);
    }
    return 0;
}
页: [1]
查看完整版本: (S1E19动手题2)为什么我输入小于20字的字符输出会换一行,但是输入大于20字的就不会?