我将如何扫描c中未知长度的字符串?有没有不用函数的方法吗?

问题描述 投票:1回答:1

我想知道如何扫描未知长度的字符串?假设我要求输入某人的全名,并且也包含空格,并且只想扫描输入的内容并将其打印出来。我读了一些有关此问题的答案,但全部都包含使用malloc / realloc的长函数。有没有办法我可以要求输入并仅在main函数本身中将其打印出来?

#include <stdio.h>

int main(void)
{
    char name[100][100];
    int i,n;

    printf("\nEnter The Limit : ");
    scanf("%d", &n);

    for(i=0; i<n; i++)
        scanf("%s\n"),name[i]);

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

就我所能想到的,我只能限制您输入的字符数,还有其他更好的方法吗?如果可以,我可以在这里使用strlen吗?

我阅读了这个问题How can I read a input string on unknown length in c?这里的答案提到使用其他功能,我想知道是否有更简单的方法吗? C程序员经常制作大型程序,要求他们提供包括全名在内的人员姓名?你们所有人都使用回答的问题中提到的大型函数吗?或者有更简单的方法吗?

感谢您的回答!

c
1个回答
0
投票

使用fgets进行输入。除非stdin已被重定向,否则fgets将读取您的输入。由于数组的大小,fgets将最多读取99个字符或换行符。对于整数,请使用fgets读取一行,并使用sscanfstrtol进行解析。如果fgets失败,它将返回NULL。sscanf将返回已成功扫描的项目数。在这种情况下,1

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

int main(void)
{
    char name[100][100] = { ""};
    char line[100] = "";
    int i = 0;
    unsigned int n = 100;
    int result = 100;

    do {
        printf("\nEnter The Limit : ");
        fflush ( stdout);
        if ( ! fgets ( line, sizeof line, stdin)) {
            fprintf ( stderr, "fgets EOF\n");
            exit ( EXIT_FAILURE);
        }
        result = sscanf(line,"%u", &n);
    } while ( 1 != result || n >= 100);

    for(i=0; i<n; i++) {
        printf("\nEnter name[%d] : ", i);
        fflush ( stdout);
        if ( ! fgets ( name[i], sizeof name[i], stdin)) {
            fprintf ( stderr, "fgets EOF\n");
            exit ( EXIT_FAILURE);
        }
    }
    for(i=0; i<n; i++) {
        printf("\n%s",name[i]);
    }
    return 0;
}
© www.soinside.com 2019 - 2024. All rights reserved.