打印字符串直到特定字符出现

时间:2017-01-06 19:58:15

标签: c arrays for-loop char

我希望打印字符串直到字符(' e')到来 我试过的代码: -

#include <stdio.h>
    int main() {
    int a,i,x;
    char b[10];
    char ch;
    //enter input string
    for(i=0;i<10;i++)
      scanf("%c",&b[i]);

    for(i=0;i<10;i++)
       if(b[i]!='e')
           printf("%c",b[i]); 

    return 0;
    }

Input:abcdefghij
Actual output:abcdfghij
Desired output:abcd
Question :我哪里错了?将break放在if block里面会在这里工作吗?

5 个答案:

答案 0 :(得分:3)

如果你想使用scanf,那就更清洁了。

#include <stdio.h>

int main()
{
   char b[101];

   scanf("%100s", b);

   printf("%s\n", b);

   return(0);
}

甚至更好。

#include <stdio.h>

#define MAX_LENGTH 100

int main()
{
   char b[MAX_LENGTH+1]; // add 1 for the terminating zero

   scanf("%100s", b);

   printf("%s\n", b);

   return(0);
}

这个使用fgets来读取整行。

#include <stdio.h>

#define MAX_LENGTH 100

int main()
{
   char b[MAX_LENGTH];

   fgets(b, MAX_LENGTH, stdin);

   printf("%s", b);

   return(0);
}

答案 1 :(得分:2)

  

如何打印字符串直到极限?

应该做的代码是使用fgets()

避免使用scanf()。是否容易使用错误。

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

int main() {
  char b[100];
  if (fgets(b, sizeof b, stdin)) {

    // If code needs to lop off the potential \n at the end
    b[strcspn(b, "\n")] = '\0';

    printf("%s\n", b);
  }
  return 0;
}

高级问题包括如何处理过长的输入行和错误处理 - 此处未显示。

答案 2 :(得分:1)

有几个错误!

  1. 如果您要从0初始化循环,则需要将条件设置为i<100

  2. 将格式说明符更改为%s

  3. 将您的IF语句更改为if(b[i]!='\0')

答案 3 :(得分:1)

这是你需要做的事情

#include <stdio.h>

int main() 
{

    int a,i,x;
    char b[10];
    char ch; 

    //enter input string
    for(i=0;i<10;i++)
    {
        scanf("%c",&b[i]);
    }

    for(i=0;i<10;i++)
    {
        if(b[i]=='e')
        {
            break;
        }
    }
    return 0;
}

RE

答案 4 :(得分:0)

#include <stdio.h>

int main()
{

    int i;
    char b[10];

    for(i=0;i<10;i++)
    {
        scanf("%c",&b[i]);
    }

    for(i=0;i<10;i++)
    {
        if(b[i]=='e')
        {
            break;
        }
        printf("%c",b[i]);

    }
    return 0;
}