【问题标题】:How to scan in a word using getchar()如何使用 getchar() 扫描一个单词
【发布时间】:2023-04-02 02:54:01
【问题描述】:

我目前正在编写一个程序,我想扫描一个单词并将其保存在一个字符数组中。如何使用 getchar() 将用户输入中的单词扫描到数组中。谢谢。

【问题讨论】:

  • 使用scanf 读取字符串会比使用getchar 一次读取一个字符更容易吗?
  • 我该怎么做?
  • 您以前从未使用过scanf 吗?如果你稍微搜索一下,一定有成千上万(或更多)的例子来说明如何使用它。
  • 建议发布您的程序。

标签: c arrays scanf getchar


【解决方案1】:

如果您必须使用getchar(),请尝试这样的操作

char array[SOME_GOOD_SIZE] ;
int i = 0 , ch;
while( ( ( ch = getchar() ) != '\n' ) && ( ch != ' ' ) && ( i < ( SOME_GOOD_SIZE - 1 ) ) )
   array[i++]=ch;
array[i]='\0';

或者干脆使用scanf()(推荐)点赞

char array[SOME_GOOD_SIZE];
scanf("%s",array);

【讨论】:

  • 防止两个代码中的缓冲区溢出。如果您这样做,您将获得我的 +1。 getchar 代码是错误的。它行不通。此外,ch 应该是 int
  • 忘记了,感谢通知@CoolGuy,这个编辑可以吗?
  • @CoolGuy,getchar 代码错误是什么意思?
  • 提示:( ch = getchar() != '\n' ) 哪个会先执行? !==?
  • getchar 返回一个intchar 声明时,可以是 unsignedsigned(实现定义)。如果charunsigned,当getchar()返回EOF时,它会回绕,造成EOF没有遇到的困惑。
【解决方案2】:

试试这个:

#include <stdio.h>

int main(void) {
    char word[100] = { 0 };
    scanf("%s", word);
    printf("%s", word);
    return 0;
}

【讨论】:

  • Scanf 是从键盘读取字符串的最佳选择(在我看来),但也许他也想要带有 getchar() 的版本。
【解决方案3】:

扫描一个“单词”通常需要 5 个步骤:

  1. (可选)扫描并丢弃所有前导空白。

  2. 扫描并保存一些有限数量的非空白。

  3. 继续直到遇到EOF 或空白字符 - 放回最后一个字符。

  4. '\0' 附加到“单词”。

  5. 报告结果。

.

// Return count of `char` saved into word.  -1 on EOF.
int JG_ReadWord(char *buffer, int size) {
  int ch;
  while (isspace(ch = getchar());
  int len;
  for (len=0; len < size-1 && ch != EOF && !isspace(ch); len++) {
    buffer[len] = ch;
    ch = getchar(); 
  }
  buffer[len] = '\0';
  unget(ch, stdin);
  if (len == 0 && ch == EOF) return -1;
  return len; 
}

这类似于

char buffer[80];
// retval = 1 (word of length > 0), or EOF.
int retval = scanf("%79s", buffer);

【讨论】:

    猜你喜欢
    • 2014-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-27
    • 1970-01-01
    • 1970-01-01
    • 2021-11-24
    • 1970-01-01
    相关资源
    最近更新 更多