在'。'之后打印每个字母。例如,如果我输入a..bcde..fg..h,程序将打印bfh

时间:2016-02-19 17:48:37

标签: c arrays pointers

我是C的新手,我被要求在C中创建一个程序,要求在用户输入输入后'.'后打印每个字母。

例如,如果用户输入a..bcd..e.f..gh,则输出应为befg 这是我在课堂上给出的确切例子。

我认为这需要使用指针,但我不确定如何处理这个问题,这是我到目前为止尝试做的。我知道这不正确,请帮助我了解如何使用指针来处理这个问题。

#include <stdio.h>

int main() {
char *c, count =0;

    printf("enter some characters");
    scanf("%s", &c);


    while( c != EOF ) {

        if (c != '.') {
            count ++;
        }

        else; {
            printf("%s", c);

        }
    }
}

4 个答案:

答案 0 :(得分:1)

程序可以按以下方式查看

#include <stdio.h>

#define N   100

int main( void )
{
    char s[N];
    const char DOT = '.';

    printf( "Enter some characters: " );
    fgets( s, N, stdin );

    for ( char *p = s; *p; ++p )
    {
        if ( p[0] == DOT && p[1] != DOT ) putchar( p[1] );
    }
    putchar( '\n' );
}    

它的输出可能看起来像

Enter some characters: a..bcd..e.f..gh
befg

考虑到这里打印一个点后面的任何符号(除了点本身)。您可以添加一个点后面有一个字母的检查。

答案 1 :(得分:0)

你真的不需要指针,甚至数组。基本上它是一个简单的状态引擎:读取每个字符,如果'。'遇到,设置一个标志,以便打印下一个字符。

#include <stdio.h>

int main() {
    int c, flag = 0;
    while ((c = getchar()) != EOF) {
        if (c == '.')
            flag = 1;
        else if (flag) {
            putchar(c);
            flag = 0;
        }
    }
    return 0;
}  

答案 2 :(得分:0)

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

int main()
{
      char letter;
      char *c;
      c = malloc(256);
      printf("enter the string : ");
      scanf("%s", c);
        while( (letter=*(c)) != '\0' )
  {

        if (letter == '.') 
    {
         c++;
         letter=*c;
            if(letter!='.')
                printf("%c",letter);

            else
            {
              while(letter=='.')
               {
                  c++;
                  letter=*c;
               }
             printf("%c",letter);
            }

    }
            c++;
  }
        printf("\n");
}

答案 3 :(得分:0)

您的代码中存在一些错误:
- char * c表示指向一个或多个字符的指针。   但它指向哪里?
- scanf将字符串读取到&#34;空格&#34;。空格字符是空格本身,换行符,制表符或EOF。 scanf需要一个格式字符串和一个指向内存中的位置的指针,它放置它所读取的内容。在你的情况下,c指向一个未定义的位置,并将覆盖内存中的任何内容。
- 为什么要放置&#34;;&#34;在别的? else子句将以&#34 ;;&#34;结束。所以你的程序每次都会打印。
如果您以更易读的方式格式化代码并给出提示它们用于提示的变量名称,它会对您有很大帮助。 另一个非常重要的事情是初始化您声明的每个变量。有时候很难找到未初始化变量的错误。

我会这样做:

#include <stdio.h>


int main(int argc, char* argv[])
{
  // I read every single character. The getchar function returns an int!
  int c = 0;
  // This marks the program state whether we must print the next character or not
  bool printNext = false;

  printf("enter some characters");

  // We read characters until the buffer is empty (EOF is an integer -1)
  do
  {
    // Read a single character
    c = getchar();
    if ( c == '.')
    {
        // After a point we change our state flag, so we know we have to print the next character
        printNext = true;
    }
    else if( c != EOF )
    {
        // When the character is neither a point nor the EOF we check the state
        if( printNext )
        {
            // print the character
            printf( "%c", c );
            // reset the state flag
            printNext = false;
        }
    }
    // read until the EOF occurs.
  }
  while( c != EOF );
}