0

我需要检测输入是否是新行。之后,我需要将其转换为'\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++;
}

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

4

3 回答 3

0

使用 后fgets(buffer,...)
1. 缓冲区以第一次出现 a\n然后 a结束\0
2. 它可以改为仅以 a\0和 no结尾\n
3. 如果没有可用输入或 I/O 错误,缓冲区可能不会改变。

char buffer[N];
if (fgets(buffer, sizeof(buffer), stdin) == NULL) {
  ; // handle no data read as file I/O error or EOF
}
else {
  size_t len = strlen(buffer);
  // Be sure to check for len > 0
  if ((len > 0) && (buffer[len - 1] == '\n')) {
    buffer[--len] = '\0';
  }
  // use buffer
}
于 2013-09-07T03:38:23.190 回答
0

您发布的代码和下面的代码存在很多问题,但我认为它回答了您的问题。

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

#define LEV3 "\t\t\t"
#define LEN 30
char studno[LEN+1];

void number()
{
  printf(LEV3"Student No. (20XXXXXXX):\t");
  fgets(studno, LEN, stdin);

  int x = atoi(studno);
  if (((x/10000000)>=21||(x/10000000)<=19))
  {
    printf("ERROR: Invalid Student Number. Format should be 20XXXXXXX.\n");
    number();
  }

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

int main(int argc, char* argv[]) {
  number();
  printf("'%s'", studno);
  return 0;
}
于 2013-09-07T02:30:26.023 回答
0

如图所示,您的代码至少有几个语法错误。

  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';
    }

    ...
}
于 2013-09-07T02:21:43.570 回答