使用C从用户那里获取一些字符串输入

时间:2014-11-20 10:47:09

标签: c gcc

我对C语法不太熟悉。我需要根据用户输入处理一些数据。虽然我成功处理了数据,但我仍然停留在用户输入部分。我删除了不必要的数据处理部分,并提供了一个简单的示例,说明我如何获取用户输入。任何人都可以告诉我以下代码的问题是什么:

int i, number;
char *str;
str=(char*)malloc(1000*sizeof(char));
printf("Enter count : ");
scanf("%d", &number);
for(i=0; i<number; i++)
{
    printf("\nEnter string: ");
    scanf ("%[^\n]%*c", str);
    printf("%s", str);      
}

输出:

&#34;输入计数:&#34;看起来很好,但每当我提供一些价值而点击进入它时,只显示我的数字&#39;计数&#39;输入字符串的数量:不允许用户输入字符串。

例如 -

Enter count : 2

Enter string:
Enter string:

但如果我丢弃计数输入部分并提供任何固定值,例如

for(i=0; i<5; i++)

一切正常

提前致谢

3 个答案:

答案 0 :(得分:2)

仅供参考,for(i=0; i<number; i++)没有问题,扫描逻辑存在问题。

实际上,scanf ("%[^\n]%*c", str);是不对的。你应该使用%s来读取字符串,而不是%c,它读取单个字符,包括 ENTER (换行符)。

相反,我建议,使用fgets()作为输入。它在各个方面都是更好。查看手册页here

也许你可以使用像

这样的东西
//Dummy code

int i, number;
char *str;

printf("Enter count : ");
scanf("%d", &number);
str=malloc(number*sizeof(char));   //yes, casting not required
fgets(str, (number-1), stdin );      //"number" is used in different context
fputs(str, stdout);

编辑:

工作代码

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

#define SIZ 1024

int main()
{
    int i, number;
    char * str = malloc(SIZ * sizeof (char));

    printf("Enter the number :\n");
    scanf("%d", &number);
    getc(stdin);                      //to eat up the `\n` stored in stdin buffer
    for (i = 0; i < number; i++)
    {
        printf("Enter the string %d :", (i+1));
        fgets(str, SIZ-1, stdin);
        printf("You have entered :");
        fputs(str, stdout);
    }

    return 0;
}

答案 1 :(得分:0)

输入计数值后会出现换行符\n,该值由您在scanf中的%c获取 只需使用%s扫描字符串,如下所示。

scanf("%s",str);

如果您的输入中有空格。

然后做

char c[50];

fgets(c,sizeof(c),stdin);

检查以下代码:

#include <stdio.h>
#include<stdlib.h>
int main(){
   int i, number;
   char *str;
   str=malloc(1000*sizeof(char));
   printf("Enter count : ");
   scanf("%d%*c", &number);
   for(i=0; i<number; i++)
   {   
      printf("\nEnter string: ");
      fgets(str,1000,stdin);
      printf("%s", str);    
   }   
}

答案 2 :(得分:0)

的scanf( “%S”,STR);使用此代替您正在使用的代码来获取字符数组中的字符串输入。