【发布时间】:2016-05-03 11:34:04
【问题描述】:
我创建了一个自动打字机器人,它模拟用户给出的字符串字符。
我的代码是这样的:
printf("Enter speed (wpm) (1 to 11750):");
scanf("%d", &speed);
if(speed < 1 || speed > 11750)
{
printf("\nPlease provide CORRECT DATA\n");
return -1;
}
printf("Paste the String : \n");
gets(exaArray);
exaArrayLength = strlen(exaArray);
relation = (int)11750/speed;
printf("typing will start in 2 sec-\n");
Sleep(2000);
i=pos=0;
while(i<=exaArrayLength)
{
Sleep(relation);
if((exaArray[pos]>96) && (exaArray[pos]<123)) //small letters
{
keycode=0x41 + (exaArray[pos]%97);
smallLetter(keycode); //function for key simulation
}
.....
我正在使用gets 函数进行输入。当我粘贴不包含 Enter 的文本时,该程序运行良好。所以这个程序适用于一个段落。 但是如果用户提供了多个段落,那么它只模拟第一段。
因为gets 在 '\n' 处终止。哪个函数可以接受多个段落输入并将其分配给一个字符串。
【问题讨论】:
-
循环阅读函数,连接到目前为止已阅读的内容。
-
OT: 并且不使用
gets(),而是使用fgets()。 -
@alk 先生,如果我使用这样的输入 - fgets(s, 20000, stdin);当用户输入中有 Enter 或 \n 时,此语句不会终止吗?
-
@Prabhakarrai 是的,但至少您不必担心缓冲区溢出。此外,在最新的 C 标准 C11 中,
gets函数实际上已被删除。 -
您应该将
fgets()作为第二个参数传递给您第一个所指的大小。这与在读取换行符时停止输入无关,而是与代码安全有关。
标签: c user-input