如何检查数组以回车

时间:2014-12-23 16:00:02

标签: c arrays

我刚刚开始学习C并正在完成一些基本练习。我正在编写一个小程序,询问用户的名字,将字符添加到数组中,然后在屏幕上打印数组。如果用户没有输入任何内容(回车),程序应该打印一条消息并退出。它主要起作用,只是当用户按下回车时没有任何反应;

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

char memberTest[10];
int i;

int main()
        {
        // ASK QUESTION TO BE ANSWERED
        printf("Enter a family member's name (or Press Enter to finish/exit): ");
        //TAKE ENTERED STRING AND INSERT IT INTO FAMILY ARRAY
        scanf("%s", memberTest);
        //IF MEMBERTEST HAS NOTHING IN IT, CLOSE THE PROGRAM
        if(memberTest[0] == '\n')
                {
                printf("You have entered nothing.  Goodbye.\n");
                exit(0);
                }
        //PRINT OUT THE CONTENTS OF THE MEMBERTEST ARRAY
        printf("%s\n", memberTest);
        exit(0);
        }

所以,if语句中的逻辑是如果memberTest数组中的第一个元素是回车符('\ n'),它应该打印消息并退出(这是在Linux上,否则我明白了我相信'\ r'中的Windows回车。我仍然试图理解指针的正确应用,所以我不确定这是否与此问题有关。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:4)

'\n'使用scanf不会扫描fgets

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

char memberTest[10];
int i;

int main()
        {
        // ASK QUESTION TO BE ANSWERED
        printf("Enter a family member's name (or Press Enter to finish/exit): ");
        //TAKE ENTERED STRING AND INSERT IT INTO FAMILY ARRAY
        fgets(memberTest, sizeof memberTest, stdin);
        //IF MEMBERTEST HAS NOTHING IN IT, CLOSE THE PROGRAM
        if(memberTest[0] == '\n')
                {
                printf("You have entered nothing.  Goodbye.\n");
                exit(0);
                }
        //PRINT OUT THE CONTENTS OF THE MEMBERTEST ARRAY
        printf("%s\n", memberTest);
        exit(0);
        }

这样可以防止溢出memberTest并读取'\n'字符。

答案 1 :(得分:2)

%s转换说明符告诉scanf跳过任何前导空格(包括换行符)并读取下一个非空白字符序列;它会阻塞,直到有非空白字符要读(或遇到EOF)。

您需要使用fgets。它会将换行符存储到缓冲区(如果缓冲区中还有剩余空间):

if ( fgets( membertest, sizeof membertest, stdin )
{
  if ( membertest[0] == '\n' )
  {
    // exit
  }
  // process membertest
}

对于10个字符的缓冲区,fgets将读取并存储最多9个字符,并在最后一个字符后写入0终止符。如果键入12个字符,则不会从输入流中读取最后3个加上换行符。您需要确保您的缓冲区足够大,以存储您最大的预期字符串加上换行符加上0终结符(或进入动态内存管理,但您可能还不想这样做)。