在C语言中,如何读取一个字符串,直到新行除第一个字符外的所有字符都是换行符?

hwamh0ep  于 2022-12-11  发布在  其他
关注(0)|答案(1)|浏览(178)
void Init() {
    fflush(stdin);
    printf("Input the cup name:");

    scanf("%[^\n]s", array_of_water[indexx].name); 
    array_of_water[indexx].water = rand() % 31 + 20;
}

"%[^\n]s"我知道它会读取字符串直到遇到换行符。但是,如何使第一个字符不是换行符的例外。
如果我在键盘上按回车键,字符串将保存\n作为它的元素。但我不想这样,我想让用户输入,除了换行符本身。除此之外,如果我想读到字母/数字/其他符号,格式说明符如何变化?

bq9c1y66

bq9c1y661#

如何读取一个字符串,直到新行除了第一个字符是换行符本身...?

正确使用scanf()将成功

OP的scanf("%[^\n]s", array_of_water[indexx].name);缺少上下文,因为array_of_water[indexx].name的大小和输入都是未知的。fflush(stdin);也是未定义的行为。删除它。

**"%[^\n]s"中的s不正确。请删除s

char buf[100];
int count = scanf("%99[^\n]", buf);
switch (count) {
  case EOF: puts("End of file or input error"); break;
  case   1: printf("Success <%s>\n", buf); break;
  case   0: puts("Nothing read"); break;
}

左做:

  • 如果buf的长度为99,则使用非'\n'行的其余部分。
  • 消耗最后的'\n'
  • 处理讨厌的 * 空字符 *(如果已读取)。

使用fgets()更简单。

char buf[100];
if (fgets(buf, sizeof buf, stdin)) {
  buf[strcspn(buf, "\n")] = 0; // Lop off potential \n
  printf("Success <%s>\n", buf);
} else {
  case EOF: puts("End of file or input error"); break;
}

左做:

  • 如果读取的buf的长度为99,则可能使用非'\n'行的其余部分。

相关问题