gpt4 book ai didi

c - 解析字符串时,第一次迭代后第一个字母丢失

转载 作者:行者123 更新时间:2023-12-04 11:33:51 28 4
gpt4 key购买 nike

我的 C 程序应该接收一个用逗号分隔的全名。示例输出如下:

Enter input string:
Jill, Allen

第一个词:Jill

第二个字:Allen

Enter input string:
Golden , Monkey

第一个字:Golden

第二个字:猴

Enter input string:
Washington,DC

第一个词:Washington

第二个字:DC

Enter input string:
q*

但是,在我当前的代码中,Jill, Allen 可以按预期工作,但其他两个名字不能正常工作,因为缺少第一个字母。我认为发生这种情况是因为输入格式。每个名称都由一个新行分隔,因此机器不会读取终止行,从而忽略第一个字母。这是我的代码现在输出时的样子:

Enter input string:
Jill, Allen

第一个词:Jill

第二个字:艾伦

Enter input string:
Golden , Monkey

第一个词:olden

第二个字:,

Enter input string:
Washington,DC

第一个词:ashington

第二个字:,

如您所见,First word 中的第一个字母丢失,然后弄乱了 Second word。任何建议将不胜感激谢谢。我的代码:

#include<stdio.h>
#include <string.h>

int main(void) {

char name[100];
char firstName[100];
char lastName[100];
char comma = ',';
char quit;
int i;

while(quit != 'q')
{
printf("Enter input string:\n");
fgets(name, 100, stdin);
scanf("%c", &quit);

if(!(strchr(name, comma)))
{
printf("Error: No comma in string.\n\n");
}

if((strchr(name, comma)))
{
sscanf(name, "%s%s", firstName, lastName);
for(i = 0; i < strlen(name); i++)
{

if(firstName[i] == ',')
{
firstName[i] = '\0';
}
}
printf("First word: %.10s\n", firstName);
printf("Second word: %.10s\n\n", lastName);
}

}

printf("Enter input string:\n");

return 0;
}

最佳答案

既然你想在用户输入“q”时停止,你应该用fgets()检查你读到了什么,如果它等于字符串“q”,那么就中断循环。

所以现在,您不会读入name,而是读入line,因为您正在读的内容可以有效地是名称或命令退出。

此外,这意味着您现在可以使用 do-while 循环代替 while 循环,它“无限期”运行(停止条件为 1),直到用户输入“q”。

此外,您不需要 fgets() 的尾随换行符,因此您可以 remove it .

正如@weatherVane 评论的那样:sscanf(name, "%s%s", firstName, lastName); 不会在您检测到的逗号处停止:每个部分都在一个空白字符处停止。

但是您需要忽略空白字符(如果有的话),因此您可以摆脱该方法,而不是在调用 sscanf() 之后运行 for 循环,并使用两个循环,一个一个填写名字,然后另一个填写姓氏。

把所有东西放在一起,你会得到:

#include<stdio.h>
#include <string.h>

int main(void)
{
char line[100];
char firstName[100];
char lastName[100];
char comma = ',';
do {
printf("Enter input string:\n");
fgets(line, 100, stdin);
line[strcspn(line, "\n")] = 0;
if(!strcmp(line, "q"))
{
printf("Exiting..\n");
break;
}
if(!(strchr(line, comma)))
{
printf("Error: No comma in string.\n\n");
}
if((strchr(line, comma)))
{
int i = 0, j = 0; // i'' index for line, 'j' index for 'firstName'
while(line[i] != ',')
{
if(line[i] != ' ')
{
firstName[j] = line[i];
j++;
}
i++;
}
i++; // since we had stopped at the comma character
firstName[j] = '\0';
int k = 0; // 'k' index for 'lastName'
while(line[i] != '\0')
{
if(line[i] != ' ')
{
lastName[k] = line[i];
k++;
}
i++;
}
lastName[k] = '\0';
printf("First word: %.10s\n", firstName);
printf("Second word: %.10s\n\n", lastName);
}
} while(1);
return 0;
}

输出:

Enter input string:
Jill, Allen
First word: Jill
Second word: Allen

Enter input string:
Golden , Monkey
First word: Golden
Second word: Monkey

Enter input string:
Washington,DC
First word: Washington
Second word: DC

Enter input string:
q
Exiting..

关于c - 解析字符串时,第一次迭代后第一个字母丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59022681/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com