我如何使用 C 解决与 string_Concatenation 有关的这个问题?

How do i solve this question related to string_Concatenation using C?

我是编码新手。这是来自 Hackerrank 上 #30 天代码的问题。 但是,我无法解决它。谁能告诉我这里的问题是什么来帮助我?

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

int main() {
    int i = 4;
    double d = 4.0;
    char s[] = "Hello ";
    // Declare second integer, double, and String variables.
    int j;
    char *ptr=s;
    double c;
    char p[100];
    // Read and save an integer, double, and String to your variables.
    scanf("%d",&j);
    scanf("%lf",&c);
    scanf("%[^\n]%*c",p);
    // Print the sum of both integer variables on a new line.
    printf("%d\n",i+j);
    printf("%.1lf\n",c+d);
    printf("%s%s",s,p);
    // Print the sum of the double variables on a new line.
    
    // Concatenate and print the String variables on a new line
    // The 's' variable above should be printed first
    return 0;
}

正在显示结果

Input:
12
4
Output:
16
8.0
Hello o}┌vl
╤

如您所见,我想打印连接的字符串,但它甚至不允许我将数据输入到字符串中。

我猜你按了 Enter 键进行所有输入?

Enter 键将作为换行符添加到输入缓冲区中。

%[^\n] 格式 停止 阅读一旦找到换行符。它读取的第一个字符 换行符。因此它不读取任何内容,并且数组 p 将保持未初始化状态 indeterminate 内容。

您需要告诉 scanf 跳过前导换行符,这是通过在格式字符串中添加显式 space 来完成的:

scanf(" %99[^\n]",p);
//     ^
// Note space here

注意我限制输入99个字符,不会溢出缓冲区。还要注意,您不需要阅读字符串后的换行符。