我希望在C语言中使用<stdio.h>
一次一个地读取任意数量的字符串。
我知道您可以使用以下内容对整数执行此操作:
while (scanf("%d ", &integer))
但我不能这样做:
while (scanf("%s", string))
如何实施上述内容?
输入位于不同的行上。
答案 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。