将字符串作为输入并将它们存储在C中的字符数组中

use*_*393 -2 c

我很难理解如何在C中的数组中存储字符串,每个字符分开保存.作为一个示例,如果用户输入hellop,我希望将其存储给定的阵列中,发言权userText,与userText[0] = h,userText[1] = e,userText[2] = l,等.我知道这很容易,但我还是新手.所以,如果有人能提供帮助,那就太好了.请解释如何使用指针执行此操作.

#include<stdio.h>
void main()
{
    char a[10],c;
    int i=0;
    while((c=getchar())!='\n')
    {
        scanf("%c",&a[i++]);
        c=getchar();
     }
     for(i=0;i<11;i++)
         printf("%c",a[i]);
}
Run Code Online (Sandbox Code Playgroud)

eoeoeoeo\363当我输入时,程序输出一些垃圾值()hellop.

Nob*_*lis 7

要读取输入,我建议使用fgets功能.这是一个不错的,安全的替代品scanf.

首先让我们声明一个缓冲区,如下所示:

char user_input[20];
Run Code Online (Sandbox Code Playgroud)

然后我们可以通过以下方式从命令行获取用户输入:

fgets(user_input, 20, stdin);
Run Code Online (Sandbox Code Playgroud)

这将从标准输入中将最多20个字符存储到字符串中,并确保它以空值终止.我们将输入限制为先前声明的数组大小的事实确保了不存在缓冲区溢出的可能性.

然后让我们清楚使用strlen输入到字符串中的讨厌的换行符:

user_input[strlen(user_input) -1] = '\0';
Run Code Online (Sandbox Code Playgroud)

由于strlen返回字符串的大小,直到 null终止符,但没有它,我们可以确定该位置是换行符(\n).我们用null-terminator(\0)替换它,以便字符串在那里结束.

最后,让我们使用printf打印它:

printf("The user has entered '%s'\n", user_input);
Run Code Online (Sandbox Code Playgroud)

要使用fgets,printf您需要声明以下标头:

#include <stdio.h>
Run Code Online (Sandbox Code Playgroud)

因为strlen我们需要另一个标题,即:

#include <string.h>
Run Code Online (Sandbox Code Playgroud)

任务完成.

PS如果我可以解决您添加到问题中的代码.

  1. main通常被声明为int main而不是void main也需要main返回某种值的值.对于小型应用程序,通常return 0;放在结束括号之前.此返回用于向OS指示程序是否成功执行(0表示一切正常,非零表示存在问题).

  2. 你不是在终止你的字符串,这意味着如果你以任何其他方式阅读而不是仔细循环,你将遇到问题.

  3. 您从用户那里获取两次输入- 一次使用getchar,然后使用scanf.

如果你坚持使用你的代码我已经修改了一下:

#include<stdio.h>
int main()
{
    char a[10];
    int i=0;
    while( (a[i++]=getchar()) != '\n' && i < 10) /* take input from user until it's a newline or equal to 10 */
        ;
     a[i] = '\0'; /* null-terminate the string */
     i = 0;  
     while(a[i] != '\0') /* print until we've hit \0 */
         printf("%c",a[i++]);

     return 0;
}
Run Code Online (Sandbox Code Playgroud)

它现在应该工作.