在C中编程涉及字符串

时间:2015-12-28 11:08:47

标签: c string

1.实际上我想首先给出一个数字N(我要输入的字符串数量)作为输入,然后在下一行使用gets()给出一个字符串。但是当我按下回车然后输入no。我可以输入的字符串是N-1.我尝试使用printf(“\ n”)但它没有用。请任何人都可以帮助我。

    //code
    int N,i,arr[N]; 
    char str[50];
    scanf("%d",&N) //no. of strings required
    for(i=0;i<N;i++)
    {
      gets(str);
       arr[i]=strlen(a);
     }
     for(i=0;i<N;i++)
     {
      printf("%d\n",arr[i]);
     }

我想输入我的输入:

    2  //no. of strings
    ABCFD //string 1
    ASWD //string 2
    //But actually what i am getting using printf("\n")

并输出:

    5
    4

但我得到的是:

    2
    //blank space 
    ASWD //string 2

和输出

    0
    4

3 个答案:

答案 0 :(得分:1)

输入N的值后,输入缓冲区中仍然存在newline,以下gets将其接受为空白输入。在任何情况下,gets都是不推荐使用的功能:请使用fgets,例如这样。我打印了每个条目,以显示每个条目末尾有一个newline,并删除了该换行符。

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

int main(void) {
    int N, i; 
    char str[50];
    printf("Enter number of cases\n");
    scanf("%d%*c", &N);                                 // read newline too, but discard
    for(i=0; i<N; i++)
    {
        printf("\nEnter string\n");
        if (fgets(str, sizeof str, stdin) == NULL)
            return 1;
        printf("Shows newline >>%s<<\n", str);          // show that newline is retained
        str [ strcspn(str, "\r\n") ] = 0;               // remove trailing newline
        printf("After removal >>%s<<\n", str);          // show that newline was removed
    }
    return 0;
}

节目输出

Enter number of cases
2

Enter string
one
Shows newline >>one
<<
After removal >>one<<

Enter string
two
Shows newline >>two
<<
After removal >>two<<

答案 1 :(得分:0)

试一试 -

int lineNumbers;
scanf("%d", &lineNumbers);
char **linesOfString = (char**) malloc(lineNumbers * sizeof(char *));
int i;
for(i = 0; i < lineNumbers; i++) {
    fflush(stdin);
    linesOfString[i] = (char *) malloc(255 * sizeof(char));
    scanf("%s", linesOfString[i]);
}
for(i = 0; i < lineNumbers; i++) {
    printf("%s", linesOfString[i]);
}
free(linesOfString);

return 0;

答案 2 :(得分:-1)

听起来你没有得到预期的字符串数量,这是正确的吗?

如果是这种情况,请查看循环代码。

最有可能的新手错误是索引。 C中的数组为0索引。

这意味着如果你有int test [3],那么test的索引将是0,1和2.这意味着最高索引将是N-1。

因此,请确保您接受的第一个字符串被放入索引0,而不是索引1。