使用名为HackerRank的网站the challenge here在我的C蜘蛛网上除尘是从stdin
读取3个不同的输入,然后打印出更改的数据。
输入
第一行包含整数
第二行包含双重
第三行包含一个字符串/句子
输出
整数输入+变量i
双输入+变量d
变量s +字符串输入
看起来很直接,我会使用scanf
作为整数和 double 然后使用fgets
作为字符串因为scanf
将在第一个空格后终止。
我的问题是,似乎fgets
似乎没有填充buffer
,但我不确定它是否可能是网站编译器或仅仅是我缺乏知识。
int i = 4;
double d = 4.0;
char s[] = "HackerRank ";
// Declare second integer, double, and String variables.
int singleNum;
double doubleNum;
char buffer[256];
char outputString[300];
// Read and save an integer, double, and String to your variables.
scanf("%d", &singleNum);
scanf("%lf", &doubleNum);
fgets(buffer, 256, stdin);
// Print the sum of both integer variables on a new line.
singleNum += i;
printf("%d\n", singleNum);
// Print the sum of the double variables on a new line.
doubleNum += d;
printf("%.1f\n", doubleNum);
// Concatenate and print the String variables on a new line
strcat(outputString, s);
strcat(outputString, buffer);
printf("%s", outputString);
// The 's' variable above should be printed first.
但是,当我这样做时,buffer
始终为空。如果我使用scanf
,我至少会在字符串输入前面得到第一个单词。
这里没有超级关注内存使用情况,只是试图在固定参数内完成问题。
所以,我的问题是 - 我在这里做错了吗?
我的输出:
输入(stdin)
12 4.0 is the best place to learn and practice coding!
您的输出(标准输出)
16 8.0 HackerRank
预期输出
16 8.0 HackerRank is the best place to learn and practice coding!
编译器消息
Wrong Answer
答案 0 :(得分:2)
但是,当我这样做时,缓冲区始终为空。如果我使用scanf,我至少会在字符串输入前面得到第一个字。
问题是'\n'
中的空格(buffer
在扫描双倍数字的末尾输入)正在消耗
white space
中进行扫描之前,使用scanf(" ");
消费buffer
scanf(" ");
fgets(buffer, 256, stdin);
有没有办法在scanf语句中包含换行符,所以我不需要额外的一个?
是的,您可以进一步将上述两个陈述简化为:
scanf(" %255[^\n]",buffer); //consumes and scans into buffer
或者你也可以:
scanf("%lf\n", &doubleNum); //consume at the end
fgets(buffer, 256, stdin); //scan into buffer
答案 1 :(得分:1)
这里有一个明显的问题是声明了outputString
,但没有初始化:
char outputString[300];
我假设它在块作用域中声明,因此它包含垃圾值,无论堆栈中是什么。这可能会使strcat
混淆,后者期望NUL
终止:
strcat(outputString, s);
修复将在strcat
调用之前添加以下行:
outputString[0] = '\0';
答案 2 :(得分:0)
I have solved the Hackerrank C dataType First day challenge problem without using strcat function. Below is the solution to this problem.
int main() {
int i = 4;
double d = 4.0;
char s[] = "HackerRank ";
// Declare second integer, double, and String variables.`enter code here`
int i1=0;
double d1=0.0;
char name[100];
// Read and save an integer, double, and String to your variables.
scanf("%d",&i1);
scanf("%lf",&d1);
getchar(); // Used this function to remove the '\n'from double.
scanf("%[^\n]s",name);
// Print the sum of both integer variables on a new line.
printf("%d\n",i+i1);
// Print the sum of the double variables on a new line.
printf("%0.1lf\n",d+d1);
// Concatenate and print the String variables on a new line
// The 's' variable above should be printed first.
printf("%s%s\n",s,name);
return 0;
}