输入一串字符,输入回车时停止

-

```
#include<stdio.h>

int main() {

char a[20];

int i;
for(i=0;a[i]!="\n";i++)
{
    scanf("%c",a[i]);
}
return 0;

}```
利用循环输入一个字符数组,遇到回车时停止,但是这样会报错,运行速度很慢

在使用C语言编写的这段代码中,存在以下问题:

该程序不会输出任何提示信息,告诉用户该输入什么内容。建议添加合适的提示信息以清晰地指导用户操作。

在for循环中用!="\n"来比较判断条件是错误的,因为a[i]是字符类型,而"\n"是字符串类型。应该将判断条件修改为 a[i] != '\n' 或者使用strcmp函数进行字符串相等的判断。

在使用scanf()函数读取字符数据时,需要指定对应变量的地址,即&a[i]而不是a[i]。

为了防止输入超出数组长度,应该在定义字符数组时给其分配足够的空间,如char a[20];可以修改为char a[50];或更大。

下面是修改后的示范代码:

#include <stdio.h>

#define MAX_LEN 50     // 定义字符数组最大长度

int main() {
    char a[MAX_LEN];
    int i;
    printf("请输入一个字符串(不超过%d个字符):", MAX_LEN - 1);
    for (i = 0; i < MAX_LEN; i++) {
        scanf("%c", &a[i]);   // 读取输入的字符到a[i]中
        if (a[i] == '\n') {   // 当输入回车符时结束输入
            break;
        }
    }
    printf("您输入的字符串是:%s\n", a);  // 输出输入的字符串
    return 0;
}

该程序可以读取用户输入的字符串,并在输出时将其打印出来。

#include<bits/stdc++.h>
using namespace std;
int i;
char a[20]; 
int main(){
    while(cin>>a[i++]){
    }
    return 0;
}
//换行后再输入^Z(Ctrl+z)

这样改,供参考:

#include<stdio.h>
int main() {

    char a[20];
    int i;
    for (i = 0; (a[i] = getchar()) != '\n'; i++);
    //{
    //    scanf("%c", a[i]);
    //}
    a[i] = '\0';
    puts(a);
    return 0;
}