繁体   English   中英

如何在C中输入用换行符分隔的两个字符串

[英]How to input two strings separated by new line in C

如何输入用换行符分隔的2个字符串?

我的问题:

首先,我需要给出要获取的字符串数,然后需要获取那些字符串,然后显示出来。

我尝试了这个:

码:

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

int main()
{

    int n,i = 0;
    scanf("%d", &n);
    char arr[n][100];
    for(int i = 0; i < n; i++)
    {
        scanf("%[^\n]s", arr[i]);
    }

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

    return 0;
}

我的输入是:

2 I am
Aravind

我的输出是:

I am
þ

第一行是正确的,但第二行显示了一些垃圾值。 帮我解决这个问题。

您有两个主要问题:

  1. "%["格式以结尾的"]"结尾,结尾不应有"s"

  2. "%["格式不会跳过前导空格,就像换行符一样,它将在您阅读的第一行之后出现。

通过使用fgets读取整行代码,可以轻松解决这两个问题。

您已经有建议不要使用scanf 但是,如果“必须”使用scanf则可以考虑以下方法:

  • 对于动态内存分配,您应该使用malloc
  • 换行符停留在标准输入中,因此需要刷新或处理/忽略

这是更新的代码。

int main()
{
    int n,i = 0;
    scanf("%d", &n);

    scanf("%*[\n]"); 
    /*this will read the \n in stdin and not store it anywhere. So the next call to 
     * scanf will not be interfered with */

    char **inputs;
    inputs = malloc(n * sizeof(char *));

    for (i = 0; i < n; i++)
    {
       inputs[i] = malloc(100 * sizeof(char));
    }


    for(i = 0; i < n; i++)
    {
        scanf("%*[\n]");
        scanf("%100[^\n]", inputs[i]);
    }

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

    return 0;
}

使用gets(arr [i])代替scanf。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM