如何在C中扫描初始空格

时间:2016-03-02 16:43:07

标签: c string

我有一个典型的问题,不是我如何使用 scanf 扫描空格,而是如何扫描在字符串中输入的初始空格

这就是我所做的:

    #include <stdio.h>
    #include <string.h>
    int main()
    {
       int n;
       char a[10];
       scanf("%d",&n);
       scanf(" %[^\n]",a);
       printf("%d",strlen(a));
       return 0;
     }

当我使用以下输入运行程序时:

   aa bb//note there are two spaces before initial a

,输出为6,但有8个字符,即2 spaces后跟2 a&#39; s后跟2 spaces,最后2 b&#39;

我曾经尝试过自己的功能..但是唉!长度为6。这是我的职责:

int len(char a[101])
{
    int i;
    for(i=0;a[i];i++);
    return i;
}

我认为最初的2个空格被忽略了......或者我可能错了。如果有人可以解释为什么字符串的长度为6以及如何使其8或接受我上面提到的所有8字符,那就太棒了。

编辑:这是我的实际代码

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

int main()
{
    int i,N,j,k;
    char **ans,s[101];

    scanf("%d",&N);
    ans=(char **)calloc(N,sizeof(char*));

    for(j=0,i=0;i<N;i++)
    {
        scanf(" %[^\n]",s);
        printf("%d",strlen(s));
        ans[i]=(char*)calloc(strlen(s),sizeof(char));
        for(k=0,j=((strlen(s)/2)-1);j>=0;j--,k++)
        {
            ans[i][k]=s[j];
        }
        for(j=strlen(s)-1;j>=strlen(s)/2;k++,j--)
        {
            ans[i][k]=s[j];
        }
    }

    for(i=0;i<N;i++)
    {
        printf("%s\n",ans[i]);
    }

    scanf("%d",&i);

    return 0;
}

2 个答案:

答案 0 :(得分:3)

OP代码 应该已发布。

OP注释真正的代码正在使用scanf(" %[^\n]",a);,这完全解释了问题:格式中的空间占用了领先的空白区域。

要解决scanf()的其他问题,请参阅以下内容。

fgets()是正确的工具。

然而,如果OP坚持scanf()

  

如何使用scanf扫描空格,但如何扫描在字符串中输入的初始空格?

char buf[100];

// Scan up to 99 non\n characters and form a string in `buf`
switch (scanf("%99[^\n]", buf)) {
  case 0: buf[0] = '\0'; break;   // line begins with `'\n`

  //  May want to check if strlen(buf)==99 to detect a long line
  case 1: break;                  // Success.

  case EOF: buf[0] = '\0'; break; // stdin is closed.
}
fgetc(stdin); // throw away the \n still in stdin.

答案 1 :(得分:1)

我相信的问题是你需要从指针到数组而不是数组本身获得长度。 试试这个,这段代码对我有用。

int ArrayLength(char* stringArray) 
{
   return strlen(stringArray);
}