如何使用“%s \ n”而不是“%[^ \ n]”

问题描述

我对C还是很陌生。我想填充一个2d数组,其中使用字符串作为输入填充每一行。 我当前的解决方案如下:

char word[2][100]


for (int i = 0; i < 2; i++) {
        scanf(" %[^\n]",word[i]);
}

我通常理解%[^ \ n]指示符,但不理解为什么要在其之前需要空格才能起作用。

当我尝试对%s执行相同操作时,事情开始变得怪异。

char word[2][100]


for (int i = 0; i < 2; i++) {
        scanf("%s",word[i]);
}

它允许3个输入而不是2个输入并使程序崩溃。

解决方法

"%s"会跳过前导空格,即使没有前导" ",例如' '和前一行的'\n'也由于 Enter 而跳过。

" %[^\n]"也会由于" "而跳过前导空格,否则不会。然后,它会寻找非'\n'输入。

这两个都是,因为它们缺乏宽度控制,而且都无法正确读取


请考虑避免使用scanf()并使用fgets()

char word[2][100] = { 0 };
for (int i = 0; i < 2; i++) {
  char buffer[100 + 1];
  if (fgets(buffer,sizeof buffer,stdin) == NULL) break;
  buffer[strcpsn(buffer,"\n")] = '\0'; // lop off potential trailing \n
  
  strcpy(word[i],buffer);
}

还有其他一些问题,但有一些可以启动OP的问题。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...