zyh1104 发表于 2023-11-1 21:41:04

输入句子出现问题

#include <stdio.h>
#include <string.h>
#define NUM 5
int main()
{
        char slogan;
        long int length;
        char str;
        int i,max,ma=0,mi=0,min;

        for(i = 0; i < 5 ;i++)
        {
        printf("请输入第%d句话:",i+1);
        scanf("%s",slogan);
        getchar();
        length= strlen(slogan);       
        }
       
        max = length;
        min = max;       
       
        printf("你输入了下面五句话:");

        for (i = 0 ; i < 5 ; i++)
        {
                if(length>max)
                {
                        ma = i;
                        max =length;
                }
                if(length< min)
                {
                        mi = i;
                        min = length;
                }
        printf("%s",slogan);
        }

        printf("其中最长的是:%s",slogan);
        printf("其中最长的是:%s",slogan);

        return 0;
}

isdkz 发表于 2023-11-1 21:41:14

这段代码存在一个问题,即在使用scanf()函数获取输入时,只能获取到空格之前的内容,如果输入的句子中含有空格,则只能获取到空格之前的部分。这会导致输入的句子不完整,影响后续的操作。

解决方案:可以使用fgets()函数代替scanf()函数,这样可以获取完整的一行输入。

修改后的代码如下:

#include <stdio.h>
#include <string.h>
#define NUM 5
int main()
{
      char slogan;
      long int length;
      char str;
      int i,max,ma=0,mi=0,min;

      for(i = 0; i < 5 ;i++)
      {
      printf("请输入第%d句话:",i+1);
      fgets(slogan[ i], 128, stdin);
      length[ i]= strlen(slogan[ i]);      
      }

      max = length;
      min = max;      

      printf("你输入了下面五句话:");

      for (i = 0 ; i < 5 ; i++)
      {
                if(length[ i]>max)
                {
                        ma = i;
                        max =length[ i];
                }
                if(length[ i]< min)
                {
                        mi = i;
                        min = length[ i];
                }
      printf("%s",slogan[ i]);
      }

      printf("其中最长的是:%s",slogan);
      printf("其中最短的是:%s",slogan);

      return 0;
}
页: [1]
查看完整版本: 输入句子出现问题