我想读取任意数量的字符串,一次一个,<stdio.h>
在 C 中使用。我知道您可以使用以下方法对整数执行此操作:
while (scanf("%d ", &integer))
但我不能这样做:
while (scanf("%s", string))
我该如何实现上述内容?
输入在不同的行上。
您通常希望将fgets
输入读取为字符串,尤其是当您希望一行输入以一个字符串结尾时。
您还可以使用fscanf
扫描集转换来一次读取一行,例如:
char line[100], newline;
fscanf("%99[^\n]%c", line, &newline);
然后您可以检查是否newline=='\n'
确定您是否已成功读取整行,或者该行大于您提供的缓冲区。
当您尝试读取面向行的输入时,您通常希望避免使用“%s”(即使具有指定的长度),因为这会读取空格分隔的标记,而不是整行。
从您的原始问题中,我不完全理解您要做什么。当你说你想读取任意数量的字符串时,我的意思是,你希望你的程序能够读取 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。
使用 char 数组:
char charArray[100];
while (scanf("%s", &charArray))
我猜你的问题是终止循环。scanf
返回成功扫描元素的数量。如果是字符串,则空字符串也被成功扫描。因此,您需要另一个标准,例如
while(scanf("%s",string) && (strlen(string)!=0))