我想知道如何扫描未知长度的字符串?假设我要求输入某人的全名,并且也包含空格,并且只想扫描输入的内容并将其打印出来。我读了一些有关此问题的答案,但全部都包含使用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程序员经常制作大型程序,要求他们提供包括全名在内的人员姓名?你们所有人都使用回答的问题中提到的大型函数吗?或者有更简单的方法吗?
感谢您的回答!
使用fgets
进行输入。除非stdin
已被重定向,否则fgets
将读取您的输入。由于数组的大小,fgets
将最多读取99个字符或换行符。对于整数,请使用fgets
读取一行,并使用sscanf
或strtol
进行解析。如果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;
}