仅使用scanf从用户接收字符串并打印它。C语言
请原谅奇怪的格式。这是我的第一篇文章。在分配中,我必须使用scanf(“%c”)从用户处接收字符串,将其存储到数组中(例如,字符串[5]),然后使用scanf(“%s”)打印输入的字符串。我尝试的所有操作都导致字符串无法正确打印或仅打印第一个单词。非常感谢您的帮助仅使用scanf从用户接收字符串并打印它。C语言,c,C,请原谅奇怪的格式。这是我的第一篇文章。在分配中,我必须使用scanf(“%c”)从用户处接收字符串,将其存储到数组中(例如,字符串[5]),然后使用scanf(“%s”)打印输入的字符串。我尝试的所有操作都导致字符串无法正确打印或仅打印第一个单词。非常感谢您的帮助 #include <stdio.h> int main(void) { char string[81]; int i = 0; printf("Please enter a string. "); sca
#include <stdio.h>
int main(void)
{
char string[81];
int i = 0;
printf("Please enter a string. ");
scanf("%c", string);
while (string[i+1] != '\0')
{
printf("%s", i);
i++;
}
return 0;
}
#包括
内部主(空)
{
字符串[81];
int i=0;
printf(“请输入字符串”);
scanf(“%c”,字符串);
while(字符串[i+1]!='\0')
{
printf(“%s”,i);
i++;
}
返回0;
}
您可以使用char来保存每个输入的字符,但这有点棘手,因为您实际上使用了指向char的指针。您还需要更改最终的printf语句:
#include <stdio.h>
int main(void) {
char string[81];
int i = 0;
char placeholder = '0';
char* a = &placeholder; //pointer to char for scanf to load
printf("Please enter a string: ");
while (*a != '\n' && i + 1 < 81) { //deref pointer for comparison (&& size limit)
scanf("%c", a);
string[i] = *a; //copy char into cstring array (deref again)
i++;
}
string[i] = '\0'; //add the null terminator
i = 0;
while (string[i+1] != '\0') {
printf("%c", string[i]); //this prints char by char
i++;
}
printf("\n");
return 0;
}
#包括
内部主(空){
字符串[81];
int i=0;
字符占位符='0';
char*a=&placeholder;//指向要加载的scanf的char的指针
printf(“请输入字符串:”);
而(*a!='\n'&&i+1<81){//deref指针用于比较(&&size limit)
scanf(“%c”,a);
string[i]=*a;//将字符复制到cstring数组中(再次删除)
i++;
}
字符串[i]='\0';//添加空终止符
i=0;
while(字符串[i+1]!='\0'){
printf(“%c”,字符串[i]);//此命令逐字符打印
i++;
}
printf(“\n”);
返回0;
}
编辑[参见注释]使用scanf打印输入的字符串(“%s”)无法获得该结果,但我认为您正在尝试在不同时输入所有字符串的情况下执行此操作。
这可能是您想要的:
#include <stdio.h>
int main(void)
{
int somelimit = 81;
char string[somelimit];
int i = 0;
int ch;
printf("Please enter a string.\n");
while((ch = getchar()) != '\n' && ch != EOF ) {
if (i < somelimit) {
string[i++] = ch;
}
}
string[i] = '\0';
i = 0;
while(string[i] != 0)
{
printf("%c",string[i]);
++i;
}
printf("\n");
return 0;
}
#包括
内部主(空)
{
int-somelimit=81;
字符字符串[somelimit];
int i=0;
int-ch;
printf(“请输入字符串。\n”);
而((ch=getchar())!='\n'&&ch!=EOF){
if(i
请注意,您需要为此设置缓冲区限制。scanf(“%c”,字符串)代码>仅读取1个字符
使用getchar()
继续读取,直到缓冲区满、行结束、文件结束、输入错误
#include <stdio.h>
int main(void) {
char string[81];
printf("Please enter a string. ");
int ch;
size_t i = 0;
while((i < sizeof string - 1) && (ch = getchar()) != '\n' && ch != EOF) {
string[i++] = (char) ch;
}
string[i] = '\0'; // Append null character to form a _string_
printf("<%s>\n", i);
return 0;
}
#包括
内部主(空){
字符串[81];
printf(“请输入字符串”);
int-ch;
尺寸i=0;
而((i
您使用哪个字符串来测试它?使用%c
读取单个字符,而不是以null结尾的字符串。您正在寻找%80[^\n]
?@albertosinaglia任何包含多个单词的内容。像“Hello world”或“Doing this”。@JonathanLeffler不,我只允许使用scanf(“%C”)或getchar(),然后需要在scanf()
周围循环以读取组成字符串的多个字符。理论上,您可以使用%80c
获得80个字符,但这可能不是您想要的(尤其是因为它不是以null结尾的字符串)。如果(i
关闭1。尝试如果(i+1
什么是1关闭的?在这里,我将somelimit
定义为字母计数。根据你的情况,我将再储存一封我不想要的信@当i
为80
时,chux恢复monicaconsider,然后如果(i
为真。然后string[i++]=ch;
和i==81
。然后循环结束后,代码尝试string[81]='\0';
,超过数组末尾一个。如果(i+1
不“存储一个字母”。它最多可以少存储一个。我会在有空时检查它,并在必要时进行更改@chux monicamy compiler(gcc-9.2-Wall-pedantic)我也抱怨过这一点!我尝试先设置char*a=NULL
,但遇到了一个seg错误。我想声明一个新的char并指向它是正确的方法?…或者char a=0;…而(a!='\n'&&I+1<81)…scanf(“%c”,&a);string[I]=a;
.Pointer变量不需要。哦,那更干净了。出于娱乐/教育目的,我将它保持原样。