从用户输入任意数量的字符串

时间:2012-05-01 05:41:34

标签: c string file-io

我希望在C语言中使用<stdio.h>一次一个地读取任意数量的字符串。 我知道您可以使用以下内容对整数执行此操作:

while (scanf("%d ", &integer))

但我不能这样做:

while (scanf("%s", string))

如何实施上述内容?

输入位于不同的行上。

4 个答案:

答案 0 :(得分:3)

通常想要使用fgets将输入读取为字符串,尤其是当您希望一行输入最终为一个字符串时。

可以使用fscanf进行扫描集转换,一次读取一行,例如:

char line[100], newline;

fscanf("%99[^\n]%c", line, &newline);

然后,您可以检查newline=='\n'是否确定您是否已成功读取整行,或者该行是否大于您提供的缓冲区。

当您尝试读取面向行的输入时,通常需要避免使用“%s”(即使具有指定的长度),因为这会读取以空格分隔的标记,而不是整行。

答案 1 :(得分:0)

使用char数组:

char charArray[100];
while (scanf("%s", &charArray))

答案 2 :(得分:0)

我猜你的问题是终止循环。 scanf返回成功扫描元素的数量。如果是字符串,也会成功扫描空字符串。因此,您需要另一个标准,例如

 while(scanf("%s",string)  && (strlen(string)!=0))

答案 3 :(得分:0)

我并不完全理解你原来的问题要做什么。当你说你想要读取任意数量的字符串时,我认为这意味着,你希望你的程序能够读取0到n个字符串。不幸的是,在C中,你要么必须限制你想读的字符串的最大数量 #define MAX_NUMBER_OF_STRINGS_TO_READ 25,或进入一些复杂的内存分配方案来读取字符串,然后将其添加到动态内存(从malloc返回)。

我接受了最大字符串数量的上限,并编写了以下代码段:

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

char charArray[5][25] = {0};

int main(int argc, char *argv[])
{
    int in_idx = 0;
    int out_idx = 0;

    printf("\n\n%s\n", "Enter no more than 5 strings, no more than 25 characters long.");

    while(fgets (charArray[in_idx], 25, stdin))
    {
        if('\n' == charArray[in_idx][0])
        {
            printf("%s\n", "Entry terminated with newline.");
            break;
        }

        in_idx++;
    }

    for(out_idx=0; out_idx < (in_idx + 1); out_idx++)
    {
        printf("%s", charArray[out_idx]);
    }

    printf("\n%s\n", "Program ended.");

    return 0;
}

我将终止字符设为换行符。如果我只想要两个字符串,当我输入第二个字符串时按Enter键。我通过在字符数组的第一个位置查找'\ n'来终止fgets。