gpt4 book ai didi

c - 如何从 fgets 检测到新行然后将其转换为 '\0' ?

转载 作者:行者123 更新时间:2023-11-30 17:48:14 25 4
gpt4 key购买 nike

我需要检测输入是否是新行。之后,我需要将其转换为'\0' 。这是我的代码:

void number()
{
printf(LEV3"Student No. (20XXXXXXX):\t");
int x=0, i=0;
fgets(studno[i], LEN, stdin);
if('\n'==studno[LEN-1])
{
[LEN-1]='\0';
}
x = atoi(studno[i]);
if (((x/10000000)>=21||(x/10000000)<=19))
{
printf("ERROR: Invalid Student Number. Format should be 20XXXXXXX.\n");
number();
}

i++;
}

我该怎么做?我总是收到此代码的编译器错误。

最佳答案

所示代码至少有几个语法错误。

  1. printf(LEV3"Student No. ..."中的字符串包含杂散的“LEV3”。这应该是格式字符串的一部分还是它是什么?

  2. 在检查换行符的 if 中,您省略了字符串名称当尝试在字符串中设置空值时。代替[LEN-1] = '\0'; 您应该有 studno[LEN-1] = '\0';

  3. 这个函数(number)调用自身...哎呀!你的意思是这个函数是递归的吗?目前还不清楚目的是什么。您的局部变量 i 正在递增,就好像下一次调用 number 会看到它一样,但它不会,因为它是局部变量。对于这样的事情,你只需要一个循环,而不是递归。

因此,使用 @Gangadhar 的建议,您的代码最终应该如下所示以读取该行。我将剩下的留给您更新,因为我不确定您对 i 等的意图是什么,并且您还没有解释输入的格式是什么。我假设 studno 是一个 char 指针数组,但您没有显示它。

void number()
{
printf("Student No. (20XXXXXXX):\t");
int x = 0, i = 0;
fgets(studno[i], LEN, stdin);

if ('\n' == studno[i][strlen(studno)-1])
{
studno[i][strlen(studno)-1] = '\0';
}

...
}

关于c - 如何从 fgets 检测到新行然后将其转换为 '\0' ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18668940/

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