【问题标题】:Keep characters in an array将字符保存在数组中
【发布时间】:2017-12-17 16:35:54
【问题描述】:

我想做一个程序,要求用户输入一个字符,然后输入...直到他想通过按 Enter 停止并且没有字符。

然后,程序会说:“你给了角色……”

例如:

give the caracter 1: k + enter
give the caracter 2: l + enter
give the caracter 3: just enter ('\n')

结果:你给了字符:kl

我的代码无法正常工作,因为当我按下回车键时,什么也没有发生。代码如下:

#include <stdio.h>
#define N 1000

int main() {

    int i = 0;
    int j = 0;
    char str[N];

    while (str[i] != '\n') {
        printf("element number str[%d] : ", i);
        scanf("%s", &str[i]);
        i++;
    }

    printf("The string is: ");

    while (j < i) {

        printf("%s", str[j]);
        j += 1;
    }

    return 0;
}

【问题讨论】:

  • 首先在编译代码时阅读警告。将%s 替换为%c。在扫描while (str[i] != '\n') 中的str[i] 之前是什么?垃圾。先初始化还是别的什么
  • 使用 fgetc 来一次读取一个字符。
  • 数组未初始化,具有随机值
  • while (str[i] != '\n') 只是当用户按下回车键时停止程序的一种方式。这不是好方法吗?

标签: c arrays char


【解决方案1】:

您可以使用c = getchar();c = fgetc(stdin) 函数来做到这一点:

#include <stdio.h>
#define N 1000

int
main ()
{
  int i = 0;
  int j = 0;
  int c;

  char str[N];

  while (1)
  {
    c = fgetc(stdin); // or c = getchar();

    if ( (c != EOF) && (c != 0x0A ) ) // 0x0A = 'nl' character
    {
      str[i] = (char) c;
      printf ("element number str[%d]=%c \n", i, str[i++] );
    }
    else 
    {
     str[i] = 0;  
     break;
    }

  }

  printf ("The string is: %s", str);

  return 0;
}

输出:

This is my string!                                                                                                                                                                                                                                
element number str[1]=T                                                                                                                                                                                                                           
element number str[2]=h                                                                                                                                                                                                                           
element number str[3]=i                                                                                                                                                                                                                           
element number str[4]=s                                                                                                                                                                                                                           
element number str[5]=                                                                                                                                                                                                                            
element number str[6]=i                                                                                                                                                                                                                           
element number str[7]=s                                                                                                                                                                                                                           
element number str[8]=                                                                                                                                                                                                                            
element number str[9]=m                                                                                                                                                                                                                           
element number str[10]=y                                                                                                                                                                                                                          
element number str[11]=                                                                                                                                                                                                                           
element number str[12]=s                                                                                                                                                                                                                          
element number str[13]=t                                                                                                                                                                                                                          
element number str[14]=r                                                                                                                                                                                                                          
element number str[15]=i                                                                                                                                                                                                                          
element number str[16]=n                                                                                                                                                                                                                          
element number str[17]=g                                                                                                                                                                                                                          
element number str[18]=!                                                                                                                                                                                                                          
The string is: This is my string!                                                                                                                                                                                                                 

或者你可以使用你原来的scanf("%s", &amp;str1);

#include <stdio.h>
#define N 1000

int main ()
{
    int i = 0;
    int k = 0;
    int c;
    int len;

    char str[N];
    char str1[N];

    scanf("%s", &str1);

    len = strlen(str1); 

    for(k = 0; k < len; k++)
    {
       c = str1[k];     

       if ( (c != EOF) && c != '\n') // EOF will work for ^D on UNIX
       {
          str[i] = (char) c;
          printf ("element number str[%d]=%c \n", i, str[i++] );
       }
       else 
       {
         str[i] = 0;  
         break;
       }
    }   

    printf ("The string is: %s", str);

    return 0;
}

输出:

12345                                                                                                                                                                                                                                             
element number str[1]=1                                                                                                                                                                                                                           
element number str[2]=2                                                                                                                                                                                                                           
element number str[3]=3                                                                                                                                                                                                                           
element number str[4]=4                                                                                                                                                                                                                           
element number str[5]=5                                                                                                                                                                                                                           
The string is: 12345         

【讨论】:

  • 不...但我真的认为我可以在没有任何功能的情况下做到这一点!唯一的问题是 (!= '\n' ) 不起作用
  • @nolw38 好的!您可以使用scanf 来完成。显示的工作示例。
【解决方案2】:

this answer 中所述,scanf 在您给它一个字符串之前不会返回,即它会跳过空格。

正如答案中所建议的,一般来说,使用 fgets 是更好的选择。

编辑:完成您想要的事情的方法如下所示:

#include <stdio.h>
#define N 1000

int main() {

int i = 0;
int j = 0;
char str[N];

do {
    printf("element number str[%d] : ", i);
    fgets(&str[i], 3, stdin);
    i++;
} while (str[i - 1] != '\n');

printf("The string is: ");

while (i > j) {
    printf("%c", str[j]);
    j++;
}

return 0;
}

在 fgets 中,您使用数字 3,因为按 Enter 会同时给出换行符 [/n] 和回车符 [/r]。

【讨论】:

  • 我不能使用 fgets。我只能使用基本工具。也许可以通过更改我的代码中的一两行来做一些有效的事情?
  • 唯一没有使用 stdio.h 的是带有 strlen 的 for 循环。检查我更新的答案 - 可以吗?否则,您将不得不定义什么是基本工具。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-18
  • 2020-01-02
  • 2021-06-19
  • 1970-01-01
  • 1970-01-01
  • 2023-02-07
  • 1970-01-01
相关资源
最近更新 更多