0

我想读取任意数量的字符串,一次一个,<stdio.h>在 C 中使用。我知道您可以使用以下方法对整数执行此操作:

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

但我不能这样做:

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

我该如何实现上述内容?

输入在不同的行上。

4

4 回答 4

3

通常希望将fgets输入读取为字符串,尤其是当您希望一行输入以一个字符串结尾时。

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

char line[100], newline;

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

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

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

于 2012-05-01T05:51:16.013 回答
0

从您的原始问题中,我不完全理解您要做什么。当你说你想读取任意数量的字符串时,我的意思是,你希望你的程序能够读取 0 到 n 个字符串。不幸的是,在 C 中,您要么必须限制要读取的字符串的最大数量 like #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。

于 2012-05-01T19:35:09.653 回答
0

使用 char 数组:

char charArray[100];
while (scanf("%s", &charArray))
于 2012-05-01T05:43:22.833 回答
0

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

 while(scanf("%s",string)  && (strlen(string)!=0))
于 2012-05-01T05:51:12.217 回答